vscode调试nestjs必须用attach模式而非launch:request设为"attach",port与start:debug脚本端口一致(默认9229),删掉runtimeexecutable等launch专属字段,启用"restart":true;脚本需运行dist/main.js并带--inspect=0.0.0.0:9229;tsconfig.json和launch.json的sourcemap配置须对齐,outfiles含**通配符,且vscode必须打开项目根目录。

VSCode 调试 NestJS 失败,绝大多数情况不是代码问题,而是调试器根本没连上真实执行上下文——它要么在跑 src/main.ts(ts-node 动态编译),要么找不到 sourceMap,要么端口没暴露或绑错。稳定可用的路径只有一条:用编译后代码 + 正确映射 + attach 模式。
launch.json 必须用 attach,不能用 launch
很多人照着教程写 request: "launch",结果断点全灰。因为 launch 模式下 VSCode 会自己拉起进程,但 NestJS 的 npm run start:debug 已经带了 --inspect,重复启动会导致端口冲突或 inspector 未就绪。
-
request必须设为"attach" -
port必须和package.json中start:debug指定的端口一致(默认9229) - 删掉
runtimeExecutable和runtimeArgs—— 它们属于launch场景 - 加上
"restart": true,服务重启后调试器自动重连
典型配置:
{
"type": "node",
"request": "attach",
"name": "Attach to NestJS",
"port": 9229,
"restart": true,
"protocol": "inspector",
"skipFiles": ["<node_internals>/**"]
}</node_internals>
package.json 的 start:debug 脚本必须暴露 --inspect 并运行 dist/main.js
检查你的 package.json 里有没有这一行:
"start:debug": "nest start --debug 9229"
如果用的是自定义脚本,比如 node --inspect=0.0.0.0:9229 dist/main.js,注意两点:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 必须用
dist/main.js,不能是src/main.ts -
--inspect=0.0.0.0:9229中的=0.0.0.0不能省,否则 Windows/macOS 上可能绑定失败
运行前确认终端输出里有类似 Debugger listening on ws://127.0.0.1:9229/,没有就说明脚本没生效。
tsconfig.json 和 launch.json 的 sourceMap 路径必须对齐
断点不命中,80% 是因为 source map 找不到原始 .ts 文件。三个地方要同步检查:
-
tsconfig.json中"sourceMap": true和"outDir": "dist"必须同时存在且未被extends覆盖 -
launch.json中outFiles应设为["${workspaceFolder}/dist/**/*.js"](注意**,漏掉就找不到users/users.controller.js这类嵌套路径下的文件) - 确保 VSCode 当前打开的是项目根目录,不是子文件夹——否则
.vscode/launch.json不加载
验证方法:打开任意一个 dist/**/*.js 文件,末尾找 //# sourceMappingURL=xxx.js.map,确认该 .map 文件真实存在且内容可读。
npm run start:dev 不能用于调试
npm run start:dev 底层依赖 nodemon 或 ts-node-dev,它们会反复 kill & restart 进程,而 Node.js 的 --inspect 端口在进程退出时立即释放。VSCode 调试器连不上新进程,表现为“改完代码服务重启了,但所有断点全灰”。
- 调试阶段请彻底停用
start:dev,改用npm run start:debug(确保它执行的是编译后代码) - 如果用了
nest build --watch,它也不走标准tsc流程,调试器无法附加 - Windows 上若报
Cannot connect to runtime process,检查防火墙是否拦截9229端口;临时关闭防火墙测试一次就能定位
最易被忽略的其实是 outFiles 里漏掉 **,以及 VSCode 没开在项目根目录——这两个小细节会让整个调试链路静默失效,连错误提示都没有。










