vscode调试node.js必须用node --inspect或nodemon --inspect启动,禁用直接node app.js;launch.json中request须设为attach且port与--inspect端口一致,typescript项目还需sourcemaps:true及正确tsconfig配置。

调试前必须确认的 Node 版本和启动方式
VSCode 调试 Node 接口依赖 node 进程是否以调试模式启动。如果你直接用 node app.js 启动,VSCode 无法附加(attach)到进程,会提示 “No process found” 或 “Connection refused”。
正确做法是:要么用 node --inspect 启动,要么用 nodemon --inspect(开发时更实用)。注意 --inspect 默认绑定 127.0.0.1:9229,若服务监听在其他端口(如 3000),这只是调试端口,和业务端口无关。
-
node --inspect=9230 app.js可指定调试端口(避免冲突) - 使用
nodemon时务必加--inspect,仅-e js不生效 - 若用
npm start,需确保package.json中 script 是node --inspect -r ts-node/register src/index.ts这类形式,而非单纯ts-node src/index.ts
launch.json 配置里最常错的三个字段
VSCode 的 .vscode/launch.json 是调试入口,但多数人卡在 runtimeExecutable、port 和 attach 模式选择上。
常见错误:复制网上示例后把 type 设为 node 却没改 request,导致 VSCode 尝试 launch 一个新进程,而你的服务早已在另一个终端跑着 —— 结果报错 EADDRINUSE 或直接无响应。
- 对接已运行的服务(如用
nodemon --inspect启动),request必须设为attach,且port要和启动时的--inspect=xxx一致 - 想让 VSCode 自己启动服务(适合简单脚本),
request设为launch,并填对program(绝对路径或相对于工作区的路径),例如${workspaceFolder}/src/server.js -
runtimeExecutable一般不用配;只有当你装了多个 Node 版本(比如 nvm 管理),且默认node命令不是你要调试的版本时,才需指定完整路径,如/Users/xxx/.nvm/versions/node/v18.17.0/bin/node
断点不命中?检查 sourcemap 和文件映射
尤其在 TypeScript 或使用 webpack/vite 构建的项目中,断点打在 .ts 文件却无效,本质是 VSCode 找不到源码与生成代码的映射关系。
关键看两点:编译是否生成 .map 文件 + launch.json 是否启用 sourceMaps。TypeScript 用户还容易忽略 outDir 和 rootDir 配置是否匹配。
- TS 项目需确保
tsconfig.json中sourceMap和inlineSources均为true - 如果编译后代码在
dist/,而launch.json的program指向dist/index.js,则必须加"sourceMaps": true,否则断点只在 JS 文件生效 - 使用
webpack时,devtool: 'source-map'是必须的;eval-source-map在某些 VSCode 版本下不稳定,建议避开
接口请求进不来?别漏掉 autoAttach 和 timeout 设置
你打了断点、配置也对,但发请求后断点就是不触发 —— 很可能是 Node 进程还没准备好就被请求打进来,或者 VSCode 没及时 attach 上。
Node 14+ 默认开启 autoAttach,但 VSCode 的 debug.javascript.autoAttachFilter 设置可能把它关了。另外,attach 有超时机制,默认 2s,对慢启动服务(比如连数据库、初始化 Redis)不够用。
- 在 VSCode 设置中搜
autoAttach,确保Debug > Javascript: Auto Attach Filter是smart或always(生产环境慎用always) - 在
launch.json的attach配置里加"timeout": 10000(单位毫秒),给足等待时间 - 如果用
nodemon,它重启时会新建进程,旧的调试连接自动断开;此时需手动点 VSCode 工具栏的「重新启动」按钮,或启用restart: true(需 VSCode 1.85+)
调试接口数据这件事,真正卡住人的往往不是 breakpoint 本身,而是 Node 进程生命周期和 VSCode attach 时机之间的那几百毫秒偏差 —— 多试两次 timeout 和 autoAttach 组合,比反复检查代码逻辑更有效。











