结论:必须用 npm run debug 配合 request: "attach",禁用全局 nodemon;runtimeexecutable 设为 "npm"、runtimeargs 为 ["run", "debug"],launch.json 中设 "port": 9229、"restart": true、"protocol": "inspector",且 nodemon 启动必须带 --inspect-brk 参数并监听对应文件类型。

直接说结论:别用全局安装的 nodemon 配合 VSCode 调试,90% 的“重启不生效”“连不上调试器”“报 spawn ENOENT”都源于此。必须走 npm run debug + request: "attach" 这条路径,否则永远在修各种边角问题。
VSCode 找不到 nodemon?根本不是没装,是 runtimeExecutable 走错了路
常见错误现象:spawn nodemon ENOENT 或调试启动后立即失败。
原因很实在:VSCode 默认按系统 PATH 查 nodemon,但项目里 node_modules/.bin/nodemon 是个符号链接(macOS/Linux)或批处理脚本(Windows 下是 nodemon.cmd),直接写 "runtimeExecutable": "nodemon" 就会崩。
- 正确做法:设
"runtimeExecutable": "npm",再用"runtimeArgs": ["run", "debug"] - 前提是你
package.json里有对应 script,比如:"debug": "nodemon --inspect-brk ./index.js" - Windows 用户尤其注意:别手贱去改 PowerShell 执行策略(
set-executionpolicy remotesigned),那只是掩盖问题——本地 npm script 才是跨平台、可复现的解法
launch 还是 attach?选错模式,断点永远不触发
选 "request": "launch" 看似直觉,实则埋雷:VSCode 试图自己拉起 nodemon,但 nodemon 重启时旧进程退出、新进程端口重绑,VSCode 很难稳定接管。
真正能热重载的只有一条路:"request": "attach"。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
-
"port": 9229(或你指定的其他 inspect 端口)必须和nodemon启动参数一致 -
"restart": true是自动重连的关键,它让 VSCode 在 nodemon 拉起新进程后自动 reconnect - 绝对不要填
"processId"——手动选进程慢、易选错残留进程,且破坏自动化 -
"protocol": "inspector"必须显式声明,否则 Node 12+ 可能 fallback 到 legacy 协议,调试器直接失联
--inspect-brk 不是可选项,是断点生效的前提
只加 --inspect,VSCode 一连上,代码就从头飞到 app.listen(),你在路由里打的断点根本来不及命中。
--inspect-brk 强制 Node 在入口文件第一行暂停,给你留出设断点、查依赖、看环境变量的时间。
- 哪怕你只关心
router.get()里的逻辑,也得加-brk—— Express 的中间件注册、DB 连接、配置加载都在 require 阶段同步执行 - VSCode 附加成功后会自动 resume,你随时可以删旧断点、加新断点,行为和普通调试完全一致
- 漏掉这个参数,
"restart": true也没用——新进程压根没开调试通道,VSCode 连都连不上
改了代码却不重启?检查 nodemon 监听范围是否覆盖你的文件类型
默认情况下,nodemon 只监听 .js、.mjs、.cjs 和 .json。如果你改的是 .ts、.env、.yml 或 .graphql,它完全无感。
- 解决方法:在
nodemon.json里显式扩展"ext",例如:"ext": "js,json,ts,yml,env" - 或者直接在 script 里加
--ext参数:"debug": "nodemon --ext 'js,json,ts' --inspect-brk ./index.js" - TypeScript 项目还要额外注意:如果用
tsc -w编译,得让 nodemon 监听./build目录,而不是源码目录;否则 ts 文件改了,js 没更新,nodemon 根本不触发重启
最常被忽略的其实是端口一致性:nodemon --inspect-brk=9229 和 launch.json 里的 "port": 9229 必须严格一致,且该端口不能被其他进程占用——哪怕只差 1,VSCode 就连不上,也不会报明确错误,只会卡在 “正在连接…”。










