<p>Sapper 已于 2021 年归档停更,应迁移到 SvelteKit;VSCode 调试需用 type: "pwa-node"、Node.js 14–16、--inspect-brk 启动,并配置 sourceMapPathOverrides 映射 sapper://src/* 等路径以命中断点。</p>

直接说结论:Sapper 已于 2021 年正式归档(archived),不再维护;当前应迁移到 SvelteKit。VSCode 调试 Sapper 的配置仅适用于遗留项目,且必须用 Node.js 14–16 环境,新版 Node(≥18)会因 require.resolve.paths 移除等变更导致调试失败。
为什么 launch.json 里 type 不能写 node
Sapper 默认使用 rollup + sirv 启动开发服务器,不是纯 Node.js CLI 进程。直接用 type: "node" 会尝试 attach 到 node server.js,但 Sapper 的 dev server 实际由 npm run dev 触发,内部启动逻辑封装在 __sapper__/dev-server.js 中,且依赖动态 require 和 sourcemap 注入机制。
正确做法是用 type: "pwa-node"(推荐)或 type: "node" + autoAttachChildProcesses: true,并确保:
-
dev脚本必须启用--inspect或--inspect-brk(如"dev": "sapper dev --inspect-brk") -
launch.json中的port需与启动时打印的调试端口一致(默认 9229) - 若用
pwa-node,需安装官方 JavaScript Debugger (Nightly) 扩展(非旧版 Debugger for Chrome)
如何让断点命中 src/routes/ 下的 .svelte 文件
Sapper 编译后代码位于 __sapper__/dev/server 和 __sapper__/dev/client,原始源码路径与生成路径映射必须显式声明,否则 VSCode 无法关联断点。
关键配置在 launch.json 的 sourceMapPathOverrides:
{
"version": "0.2.0",
"configurations": [{
"type": "pwa-node",
"request": "launch",
"name": "Sapper: debug",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "dev", "--", "--inspect-brk"],
"port": 9229,
"webRoot": "${workspaceFolder}",
"sourceMapPathOverrides": {
"webpack:///src/*": "${webRoot}/src/*",
"meteor://?app/*": "${webRoot}/src/*",
"sapper://src/*": "${webRoot}/src/*"
}
}]
}
注意:sapper://src/* 是 Sapper 自定义的虚拟协议,必须保留;meteor://?app/* 是旧版 Rollup 插件残留路径别名,部分版本仍需兼容。
常见报错 “Breakpoint ignored because generated code not found” 怎么解
这个错误几乎都指向 sourcemap 未加载或路径映射失效。排查顺序如下:
- 检查
package.json中dev脚本是否含--sourcemap(Sapper CLI 默认开启,但自定义 rollup.config.js 可能关掉) - 确认
rollup.config.js的output.sourcemap设为true,且output.sourcemapExcludeSources为false - 删除
__sapper__目录后重新运行npm run dev,避免缓存旧 map - 在调试控制台中执行
debugger语句,看是否触发——若触发说明环境正常,只是断点映射失败
一个容易被忽略的点:Sapper 的 client-side 代码(如 src/client.js)需在浏览器 DevTools 中调试,VSCode 的 Node 调试器只管 server 端逻辑(src/server.js、hooks、server routes)。


















