VSCode调试Node.js需正确配置launch.json:type必须为"node",request设为"launch"或"attach";program指向JS文件路径;TypeScript项目需启用sourceMaps并配置outFiles;调试Web服务应开启autoAttachChildProcesses;修改配置后须重启调试会话。

VSCode 调试 Node.js 不需要额外装插件,内置的 Node.js 调试器开箱即用,但必须正确配置 launch.json,否则断点不生效、进程自动退出、或根本连不上调试器。
为什么断点不命中?检查 launch.json 的 type 和 request
VSCode 的 Node.js 调试依赖 type: "node" 和 request: "launch"(启动新进程)或 "attach"(接入已有进程)。常见错误是误设为 "pwa-node"(新版推荐,但旧项目或某些环境可能不兼容),或漏写 request 导致配置被忽略。
-
request: "launch"适用于直接运行入口文件,如node index.js -
request: "attach"适用于已用node --inspect启动的服务,比如node --inspect=9229 server.js - 若用
nodemon,建议搭配request: "launch"+console: "integratedTerminal",避免子进程调试丢失
program 路径写错会导致“Cannot find module”或直接退出
program 是调试入口的绝对路径或相对于工作区根目录的相对路径。它不是命令行里输的 npm start,而是最终执行的 JS 文件路径。常见错误包括:
- 写成
"./src/index.ts"却没配 TypeScript 编译,应指向编译后的./dist/index.js - 路径含空格或中文,未加引号(VSCode 会报错:
spawn ENOENT) - 使用了
npm run dev这类 script,却把program设为"npm"—— 这不行,必须指向 JS 文件或用runtimeExecutable指定 npm
调试 Express/Koa 等 Web 服务时,autoAttachChildProcesses 很关键
这类框架常配合 nodemon 或集群模式(cluster.fork())启动,主进程 debug 了,子进程默认不接入调试。不开启 autoAttachChildProcesses,断点只在主进程生效,路由处理逻辑进不去。
{
"type": "node",
"request": "launch",
"name": "Debug Express",
"program": "${workspaceFolder}/app.js",
"autoAttachChildProcesses": true,
"console": "integratedTerminal"
}
注意:autoAttachChildProcesses 在 VSCode 1.74+ 默认启用,但老版本或某些远程调试场景仍需显式设为 true;若用 cluster,还需确保子进程也带 --inspect 参数(autoAttachChildProcesses 会自动处理)。
调试 TypeScript 项目必须配 sourceMaps 和 outFiles
VSCode 不会自动读取 tsconfig.json 的 sourceMap 配置,必须在 launch.json 中明确声明,并告诉调试器去哪里找生成的 JS 和 map 文件。
-
sourceMaps: true是开关,不写就是false -
outFiles必须匹配实际输出路径,例如["${workspaceFolder}/dist/**/*.js"],路径错一个字符,断点就只能打在 JS 上,无法映射回 TS - 如果用了
rootDir和outDir分离结构,还要确认sourceRoot在 map 文件中是否正确(可用source-map-explorer检查)
最易被忽略的是:改完 launch.json 后没重启调试会话,或者终端里残留旧的 node 进程占着端口(Address already in use)。关掉所有终端、杀掉相关 node 进程、再点绿色三角形——这一步比写配置还重要。










