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

Svelte执行setupTypeScript.js报MODULE_NOT_FOUND错误排查

Svelte项目启动时TypeScript全量报错问题排查与修复

问题现象

  • VS Code编辑器内无任何TypeScript语法报错提示,但执行npm run dev --启动开发服务时,所有TypeScript语法均被标记为错误,服务无法正常启动
  • 项目此前可正常运行,疑似误触快捷键改动了项目文件;对比Git版本差异,仅发现package.json中部分TypeScript相关依赖版本被意外升级

排查过程遇到的典型报错

1. 缺失TS初始化脚本报错

删除node_modules目录重装全部依赖后,执行node scripts/setupTypeScript.js触发模块找不到错误:

node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'C:\(...)\my-app\scripts\setupTypeScript.js'
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

注:全局安装最新版TypeScript(执行npm install typescript@latest -g)完全无法解决该问题,无需浪费时间尝试
排查确认该报错直接原因是项目根目录下原本存在的./scripts/目录被意外删除。最初尝试通过以下命令从官方模板拷贝脚本重建目录:

mkdir tmp
cd tmp
npx degit sveltejs/template svelte-typescript-app
cp -r svelte-typescript-app/scripts ../
cd ../
rm -r tmp

重建完成后执行脚本触发第二个报错。

2. 入口文件重命名失败报错

> node scripts/setupTypeScript.js
node:internal/fs/utils:344
    throw err;
    ^

    at Object.renameSync (node:fs:980:3)
    at Object.<anonymous> (C:\(...)\my-app\scripts\setupTypeScript.js:44:4)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  errno: -4058,
  syscall: 'rename',
  code: 'ENOENT',
  path: 'C:\(...)\my-app\src\\main.js',
  dest: 'C:\(...)\my-app\src\\main.ts'
}

报错原因是TS初始化脚本默认会将JS格式入口main.js重命名为TS格式的main.ts,但项目此前已经完成过TS转换,src目录下入口文件已经是main.ts,导致重命名的源文件不存在触发错误。临时将入口文件改回main.js后脚本可正常执行,但启动服务时触发第三个报错。

3. sveltePreprocess重复声明报错

执行npm run dev --时抛出错误:Error: Identifier 'sveltePreprocess' has already been declared
排查根因为rollup.config.js中sveltePreprocess被重复声明,删除冗余的重复配置项即可解决,清理时注意同步检查配置文件中其他重复配置行,避免后续触发同类问题。

根因说明与完整修复步骤

走完上述流程后TypeScript语法报错问题仍然存在,且手动重建的scripts/目录会再次自动消失,核心原因是意外升级TypeScript相关依赖后,Svelte模板的版本校验逻辑误将当前已完成TS初始化的项目判定为原生JS项目,自动清理了scripts目录;同时升级后的svelte-preprocess版本和现有构建配置不匹配,导致构建阶段完全无法识别TS语法,才会出现编辑器无报错、启动时全量报TS错的现象。
按以下步骤操作即可彻底修复:

  • 回退package.json到Git记录的可正常运行版本,删除node_modules目录和对应锁文件(package-lock.json/yarn.lock/pnpm-lock.yaml)后重新执行依赖安装,不要保留意外升级的高版本TS相关依赖。Svelte官方模板对依赖版本匹配度要求很高,跨大版本升级依赖极易出现兼容问题
  • 从Git历史恢复被误删的./scripts/整个目录,不要直接从最新版官方模板拷贝脚本,不同版本模板的脚本逻辑存在差异,会触发重命名失败、配置覆写等各类异常
  • 检查构建配置文件(使用Rollup则打开rollup.config.js,使用Vite则打开vite.config.js),全局搜索sveltePreprocess,删除重复声明、重复传入的配置项,仅保留一份有效配置;顺便扫描整个配置文件,清理其他重复的配置行
  • 确认src目录下入口文件为main.ts,无需为了执行初始化脚本刻意改回main.js。如果存在TS配置文件缺失,直接从Git历史拉取对应版本的tsconfig.json、svelte.config.js即可,不需要重复执行TS初始化脚本
  • 删除node_modules/.cache目录清理旧构建缓存,再执行npm run dev --启动服务即可恢复正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:36:27