vscode 用 attach 模式可自动重连 nodemon 启动的 node 进程;launch 模式因 runtimeexecutable 路径问题在各平台易报 spawn enoent,应改用 npm run debug 启动并配置 --inspect-brk 和 launch.json 的 attach、port、restart 字段。

VSCode 本身不重启进程,但可以自动重连 nodemon 启动的新 Node 进程——关键在用 attach 模式,而不是 launch。
为什么 launch 模式配 nodemon 总报 spawn ENOENT
VSCode 尝试直接执行 nodemon,但:
- Windows 下
node_modules/.bin/nodemon实际是nodemon.cmd,runtimeExecutable: "nodemon"会失败 - macOS/Linux 走
PATH查找,根本找不到项目本地的nodemon - 全局安装不可靠:CI、多项目、不同 Node 版本下,
which nodemon结果不一致
别折腾 runtimeExecutable 路径。改用 npm run debug 启动,VSCode 只负责连接。
package.json 里必须有带 --inspect-brk 的 script
这是整个流程能跑通的前提。没有这个参数,nodemon 启动的进程就没有调试端口,VSCode 连都连不上。
- 入口文件路径按你实际写的填,比如
./index.js、./bin/www或./src/server.ts - 必须用
--inspect-brk,不是--inspect:前者让进程停在第一行,给你时间设断点;后者可能一眨眼就跑过初始化逻辑(如数据库连接、中间件注册) - 如果用 TypeScript,要加
--exec ts-node,例如:"debug": "nodemon --inspect-brk --exec ts-node ./src/server.ts"
示例:
"scripts": {
"debug": "nodemon --inspect-brk ./index.js"
}
launch.json 只需三个核心字段
其他字段全是干扰项。删掉 program、runtimeExecutable、runtimeArgs,只留:
-
"request": "attach":明确告诉 VSCode “我不启动,我只连” -
"port": 9229:和--inspect-brk默认端口对齐,不要改 -
"restart": true:nodemon 重启后,VSCode 自动重连新进程
完整配置片段:
{
"type": "node",
"request": "attach",
"name": "Node: Nodemon",
"port": 9229,
"restart": true,
"protocol": "inspector"
}
"protocol": "inspector" 必须显式写上,否则老版本 Node 可能 fallback 到 legacy 协议,导致断连。
修改代码后没重启?检查 nodemon 监听范围
默认 nodemon 只监听 .js、.mjs、.cjs 和 .json。如果你改的是:
-
.ts文件 → 加--ext js,ts -
.env或.yml→ 加--ext js,ts,json,yml,env -
.graphql或自定义后缀 → 全部列进--ext
运行 npm run debug 后,终端必须出现 [nodemon] restarting due to changes 才算监听生效。没这句,说明变更根本没被捕捉到。
最易被忽略的点:端口必须固定,restart: true 才有效;而端口固定的前提,是 nodemon 启动时带了 --inspect-brk=9229(或不写端口,默认就是 9229)。漏掉这个,VSCode 连不上,自然也谈不上重连。











