必须确保node命令在vscode终端中可执行,否则调试必失败;需在vscode终端用which node或where node验证路径,npm -v也须成功;launch.json最小配置需准确指定program为${workspacefolder}/app.js等绝对路径;断点失效时应清空skipfiles并确认sourcemaps开启;nodemon调试需加--inspect-brk参数。

node 命令必须能在 VSCode 终端里直接执行,否则所有调试配置都会失败——这是最常卡住的起点,不是配置问题,是环境没通。
验证 node 和 npm 是否真可用
别只在系统终端里跑 node -v 就算完。VSCode 内置终端可能用的是不同 shell(比如 Windows 上是 PowerShell,macOS 可能是 zsh),PATH 不一定继承你手动配好的环境变量。
- 在 VSCode 里按
Ctrl+`打开终端,立刻输入which node(macOS/Linux)或where node(Windows),看是否返回有效路径 - 如果报“找不到命令”,说明 VSCode 没读到你的 Node 安装路径——重装 Node.js 时务必勾选
Add to PATH;macOS 用户若用 Homebrew 安装,还需检查 shell 配置文件(~/.zshrc或~/.bash_profile)里是否有export PATH="/opt/homebrew/bin:$PATH" -
npm -v也得同时成功,因为后续launch.json里很多调试模式(比如用nodemon)依赖 npm 脚本
launch.json 最简可用配置怎么写
别一上来就抄复杂模板。VSCode 的 Node.js 调试器对入口文件路径极其敏感,路径错一个字符、少一个斜杠,断点就全灰掉。
- 确保项目根目录下有
.vscode/launch.json,内容至少包含这个最小结构:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch app.js",
"program": "${workspaceFolder}/app.js",
"console": "integratedTerminal"
}
]
}
program 必须是相对 ${workspaceFolder} 的准确路径,不能写成 ./app.js 或 app.js —— VSCode 不解析当前目录的相对路径index.js 或 server.js,记得同步改 program 字段,别留着默认名硬调断点不命中?先关掉 skipFiles 干扰
VSCode 默认会跳过 node_modules 和内置模块里的代码,但有时它连你自己写的 require() 文件都误判为“可跳过”,导致断点变空心圆、hover 显示 “Breakpoint ignored”。
- 在
launch.json的 configuration 里显式加这一行:"skipFiles": [] - 如果项目用了 TypeScript 或 Babel,还要确认
sourceMaps开启:"sourceMaps": true,且编译输出里有对应.map文件 - 重启调试会话(不是刷新页面),再点行号设断点——刚改完配置不重启,VSCode 不会重新加载规则
用 nodemon 热重载时调试端口容易冲突
很多人照着教程加了 runtimeExecutable 指向 nodemon,结果调试启动后进程一闪而逝,或者提示 EADDRINUSE ——这是因为 nodemon 默认不带 --inspect-brk,VSCode 连不上调试器。
- 本地安装:运行
npm install --save-dev nodemon -
launch.json中改写为:
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/nodemon",
"runtimeArgs": ["--inspect-brk", "${workspaceFolder}/app.js"]
--inspect-brk 是关键,它让进程启动即暂停,等 VSCode 附着;不用 --inspect,否则可能错过初始化断点npx nodemon 替代 runtimeExecutable 字段(但性能略低)node 命令本身在 VSCode 终端里就不可见,或者 program 路径和实际文件名差了一个字母。调试器不会告诉你“文件不存在”,只会沉默地跳过。











