You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit使用adapter-static构建报错:param_value.startsWith不是函数

问题分析:adapter-static构建时出现TypeError: param_value.startsWith is not a function

问题场景

使用adapter-static构建SvelteKit网站时触发如下错误:

node:internal/event_target:908
  process.nextTick(() => { throw err; });
                           ^
TypeError [Error]: param_value.startsWith is not a function

网站开发环境运行正常,但为动态路由添加entries后,构建失败,问题集中在博客模块:

  1. /blog路由通过+page.server.js的load函数重定向到/blog/page/1:
// /blog/+page.server.js
import {redirect} from '@sveltejs/kit';

export function load() {
    throw redirect(308, '/blog/page/1');
}
  1. /blog/page/[number]路由的+page.server.js配置了entries函数:
// /blog/page/[number]/+page.server.js
export let entries = async () => {
    let data = [];
    let pageNumbers = await getPageNumbers();

    for (let i of pageNumbers) {
        data.push({
            number: i
        });
    }

    return data;
}

日志显示entries返回数据为[ { number: 1 } ],但构建仍失败,完整错误栈如下:

> vite build


vite v4.3.9 building SSR bundle for production...
✓ 75 modules transformed.

node:internal/event_target:908
  process.nextTick(() => { throw err; });
                           ^
TypeError [Error]: param_value.startsWith is not a function
    at file:///home/georges/dev/cdm-front/node_modules/@sveltejs/kit/src/exports/index.js:140:22
    at String.replace (<anonymous>)
    at file:///home/georges/dev/cdm-front/node_modules/@sveltejs/kit/src/exports/index.js:131:13
    at Array.map (<anonymous>)
    at resolvePath (file:///home/georges/dev/cdm-front/node_modules/@sveltejs/kit/src/exports/index.js:130:5)
    at file:///home/georges/dev/cdm-front/node_modules/@sveltejs/kit/src/core/postbuild/analyse.js:148:56
    at Array.map (<anonymous>)
    at analyse (file:///home/georges/dev/cdm-front/node_modules/@sveltejs/kit/src/core/postbuild/analyse.js:148:34)
    at async MessagePort.<anonymous> (file:///home/georges/dev/cdm-front/node_modules/@sveltejs/kit/src/utils/fork.js:22:16)
Emitted 'error' event on Worker instance at:
    at [kOnErrorMessage] (node:internal/worker:289:10)
    at [kOnMessage] (node:internal/worker:300:37)
    at MessagePort.<anonymous> (node:internal/worker:201:57)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:639:20)
    at exports.emitMessage (node:internal/per_context/messageport:23:28)

Node.js v18.1.0

原因分析

错误根源是**entries返回的动态路由参数值不是字符串类型**。SvelteKit的resolvePath函数会尝试调用参数值的startsWith()方法,但如果参数是数字类型(比如你的number: 1),就会触发这个类型错误——数字没有startsWith()方法。

你的getPageNumbers返回的是数字数组,导致entries中number字段为数字类型,不符合SvelteKit对动态路由参数的字符串要求。

解决方案

修改entries函数,将数字类型的参数转为字符串即可:

// /blog/page/[number]/+page.server.js
export let entries = async () => {
    let data = [];
    let pageNumbers = await getPageNumbers();

    for (let i of pageNumbers) {
        data.push({
            number: String(i) // 转为字符串
        });
    }

    return data;
}

或者直接确保getPageNumbers返回字符串数组,效果一致。

修改后entries返回数据应为[ { number: "1" } ],此时构建即可正常完成。

内容的提问来源于stack exchange,提问作者scriptic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:45:37