VSCode 调试 Fastify 项目必须显式添加 --inspect 参数启用 V8 Inspector,否则断点静默失效;推荐使用 attach 模式配合 sourceMaps 和正确 outFiles 配置,并排除 node_modules 跳过限制。

VSCode 调试 Fastify 项目必须加 --inspect 启动参数
Fastify 本身不内置调试支持,Node.js 的 V8 Inspector 必须显式启用,否则 VSCode 断点会静默失效。常见现象是打上断点后程序照常运行、不暂停,控制台也无报错——本质是调试通道根本没打开。
实操建议:
- 用
node --inspect=0.0.0.0:9229 -r ts-node/register/transpile-only src/index.ts启动(TypeScript 项目);普通 JS 改为node --inspect=0.0.0.0:9229 src/index.js -
--inspect后的地址别省略成--inspect默认值(localhost),Docker 或 WSL 场景下会导致 VSCode 连不上 - 若用
fastify startCLI,必须加-w(watch)且配合--inspect:例如fastify start -w --inspect=0.0.0.0:9229 -l info src/index.ts
launch.json 里 attach 模式比 launch 更稳
Fastify 启动快、生命周期短,用 launch 模式容易因启动时序问题错过断点(尤其带热重载时)。attach 是主动连接已运行进程,可控性高,适合绝大多数 Fastify 开发场景。
实操建议:
- 在
.vscode/launch.json中配置type: "node"+request: "attach" -
port必须和启动命令里的--inspect=...:9229端口一致,常见填错为9228或9230 - 加
"restart": true可让 VSCode 在进程重启后自动重连(配合 nodemon 或 ts-node-dev) - 示例片段:
{ "type": "node", "request": "attach", "name": "Attach to Fastify", "port": 9229, "restart": true, "address": "localhost", "sourceMaps": true, "outFiles": ["${workspaceFolder}/dist/**/*.js"] }
TypeScript 项目务必配对 sourceMaps 和 outFiles
断点打在 .ts 文件却停在编译后的 .js 上,或直接不触发,基本是 sourcemap 映射失败。Fastify 项目通常用 ts-node 或先 tsc 编译,路径配置稍有偏差就失效。
实操建议:
-
sourceMaps: true是开关,但关键在outFiles要精准指向生成的 JS 文件位置(如dist/**/*.js),不能写成**/*.js - 用
ts-node时,确保tsconfig.json中sourceMap和inlineSourceMap至少一个为true - 如果用
tsc编译,检查outDir是否和outFiles路径匹配,Windows 下注意反斜杠不被识别
断点不生效?先查 node_modules/fastify 是否被跳过
VSCode 默认忽略 node_modules,但 Fastify 的插件链(比如 @fastify/jwt)里可能有你需要调试的逻辑。断点设在插件内部却无效,大概率是路径被排除了。
实操建议:
- 在
launch.json中加"skipFiles": ["<node_internals>/**"]</node_internals>,移除默认的"node_modules/**"排除项 - 更安全的做法是显式指定要包含的模块:
"trace": true开启调试日志,看 VSCode 底部状态栏是否提示 “Could not load source” - 临时验证:在
node_modules/@fastify/jwt/index.js里加个debugger语句,看能否命中——能说明环境通,不能则聚焦路径映射问题


















