VS Code按F5无法调试Node.js因缺少launch.json配置;需通过命令生成并正确设置program指向入口文件,确保Node≥8.0、sourceMap启用、attach模式端口匹配。

vscode直接按F5跑不起来Node.js?检查launch.json配置
VS Code 默认不带 Node.js 调试环境,必须有 launch.json 才能按 F5 启动调试。没这个文件,点“运行和调试”侧边栏里的“运行”按钮会报错:Cannot find the configuration to launch。
实操建议:
- 打开项目根目录,在 VS Code 中按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入并选择Debug: Open launch.json - 选
Node.js环境,它会自动生成一个基础配置,关键字段是program—— 必须指向你的入口文件,比如"program": "${workspaceFolder}/index.js" - 如果入口是 TypeScript,
program不能写.ts文件,得指向编译后的.js,或改用preLaunchTask触发tsc编译 - Windows 下路径含空格时,
program值不用额外加引号,VS Code 会自动处理;但手动写命令行参数时,args数组里每个字符串要自己包引号(如"--port=3000")
断点不生效?确认Node版本和--inspect兼容性
Node.js 8.0+ 默认启用 --inspect,但低版本(如 6.x)只支持 --debug(已废弃),而新版 VS Code 调试器只认 --inspect 协议。用旧版 Node 会导致断点灰掉、hover 看不到变量。
实操建议:
- 终端执行
node -v,确认 ≥ 8.0;若低于,升级 Node 或在launch.json里加"runtimeExecutable": "path/to/node8" - 不要手动在
launch.json的runtimeArgs里加--inspect—— VS Code 会自动注入,重复加反而导致端口冲突(错误:Starting inspector on 127.0.0.1:9229 failed: address already in use) - 如果项目用
nodemon,别在program里直接写nodemon;应设"runtimeExecutable": "nodemon",并确保"restart": true开启热重载调试
调试时看不到require的模块变量?Source Map没对上
常见于用 Webpack/Babel/TypeScript 构建的项目:断点停在源码(src/index.ts)上,但调试器显示的是编译后代码(dist/index.js)的变量,或者根本找不到作用域变量。
实操建议:
- TS 项目必须在
tsconfig.json中开启"sourceMap": true和"inlineSources": true(后者让源码嵌进 map,方便调试) - Webpack 用户,
devtool设为"source-map"或"inline-source-map",避免用"eval"类型(VS Code 不识别) - 检查生成的
.js.map文件是否和.js同目录,且sources字段里的路径能被 VS Code 正确解析(相对路径优先,绝对路径容易 404)
attach模式连不上进程?端口和pid要手动核对
attach 模式用于调试已启动的 Node 进程(比如线上复现、长时运行服务),但经常连不上,不是配置错,而是端口或 pid 没对齐。
实操建议:
- 启动 Node 进程时必须显式加
--inspect=0.0.0.0:9229(注意不是--inspect-brk,后者会卡住等待连接,适合首次 attach) - 确认进程真在监听:
lsof -i :9229(macOS/Linux)或netstat -ano | findstr :9229(Windows),看 PID 是否匹配 -
launch.json中port必须和启动命令一致;address默认"localhost",如果用了0.0.0.0,就得改成"0.0.0.0",否则连不上 - attach 模式下
processId字段可填可不填,VS Code 会自动扫描同端口进程;但如果机器上有多个 Node 进程共用端口(极少见),就得填准pid
真正卡住的地方往往不在配置本身,而在 Node 进程是否真的带着 --inspect 启动、端口有没有被占、source map 路径能不能被定位到真实文件——这些细节不验证,光调 launch.json 没用。


















