type字段必须为小写"node",填"nodejs"或"javascript"均报错;program须指向可执行JS文件(如"${workspaceFolder}/src/server.js"),不可写npm命令;Express等服务需设"autoAttachChildProcesses": false以防断点错乱。

launch.json 里 type 字段必须是 node,不是 nodejs 或 javascript
VSCode 调试器识别 Node.js 环境靠的是 type 字段,填错就直接报错 Configured debug type 'nodejs' is not supported。常见错误是凭直觉写成 nodejs,或从旧文档抄来过时的 javascript —— 这俩都不生效。
-
type只能是node(小写,无后缀) - 对应调试器是 VSCode 自带的
Node.js Debug Adapter,无需额外安装插件(除非用旧版 VSCode) - 如果项目用 TypeScript,
type仍是node,但需配合preLaunchTask或outFiles指向编译后代码
program 字段要指向可执行的 JS 入口文件,不是 package.json 的 script
program 是调试器真正启动的文件路径,必须是 .js 文件(或经 ts-node 编译的 .ts),不能写 npm run dev 或 yarn start —— 那些是 shell 命令,VSCode 不会解析。
- 正确示例:
"program": "${workspaceFolder}/src/server.js" - 错误示例:
"program": "npm run dev"(会报错spawn npm ENOENT) - 若用
nodemon,得换用runtimeExecutable+runtimeArgs,而不是塞进program - 路径支持变量,如
${workspaceFolder}、${file},但别漏掉./前缀(相对路径需显式声明)
调试 Express/Koa 服务时,必须关掉 autoAttachChildProcesses 或设为 false
Express 启动后常 fork 子进程(比如日志收集、热重载),VSCode 默认开启子进程自动附加(autoAttachChildProcesses: true),结果断点全乱套:命中位置不对、变量显示为空、甚至调试器卡死。
- 显式加
"autoAttachChildProcesses": false是最稳妥做法 - 若真需要调试子进程(如 cluster 模式),改用
attach模式 +processId手动指定,而非依赖自动附加 - 某些脚手架(如 Nest CLI)默认启用 watch,也会触发子进程,同样要关掉
autoAttachChildProcesses
修改 launch.json 后不生效?检查 configurations 是否被其他扩展覆盖
有些扩展(比如 REST Client、TypeScript 支持包)会往 .vscode/launch.json 里塞自己的配置块,VSCode 优先读取第一个 configurations 数组 —— 如果它被插件污染,你的配置可能根本没加载。
- 打开命令面板(Ctrl+Shift+P),运行
Debug: Open launch.json,确认看到的是你编辑的文件 - 删掉无关的
configurations项,只留一个干净的node配置 - 如果用多根工作区,注意
launch.json在哪个文件夹下 —— 它只对所在文件夹生效 - 改完保存后,务必重启调试会话(Stop → Start),热重载不会刷新 launch.json 解析结果
program 路径错了,env 里设再多环境变量也没用;autoAttachChildProcesses 开着,断点就大概率失效。这些不是玄学,是调试器启动链路上的真实约束。


















