Nodemon搭配VSCode调试器重启时Inspect地址已占用如何解决
解决方案
核心问题原因
你当前的启动脚本写法错误,--inspect=0.0.0.0:9229 参数被nodemon自身消费,而非传递给你要启动的Node业务进程。nodemon主进程全程不会重启,会持续占用9229调试端口,触发重启时业务进程再尝试监听同一个端口就会抛出占用错误。
方案一:保留attach模式,修正启动配置
- 修正package.json中的启动脚本,把调试参数传递给Node子进程:
nodemon -e js,gql --watch dist --watch typeDefs --delay 1000ms --exec "node --inspect=0.0.0.0:9229 ./dist/index.js"
提示:把delay从500ms调整到1000ms,给旧业务进程释放端口预留充足时间
- 项目根目录新增
nodemon.json配置,强制nodemon重启时彻底销毁旧业务进程:
{ "killSignal": "SIGKILL" }
- 调整launch.json配置,增加超时参数,适配重启等待逻辑:
{ "type": "node", "request": "attach", "name": "Debug API", "remoteRoot": "/workspaces/telehealth/projects/api", "localRoot": "${workspaceFolder}/projects/api", "protocol": "inspector", "port": 9229, "restart": true, "address": "localhost", "skipFiles": ["<node_internals>/**"], "timeout": 10000 }
完成以上修改后,调试器会在nodemon重启业务进程后自动重新attach,不需要手动启停调试器。
方案二:改用launch模式,完全自动管理生命周期
如果你不想单独启动nodemon进程,可以直接让VSCode调试器接管nodemon的启动,彻底规避端口冲突问题,对应launch.json配置如下:
{ "type": "node", "request": "launch", "name": "Debug API with Nodemon", "cwd": "${workspaceFolder}/projects/api", "runtimeExecutable": "nodemon", "runtimeArgs": [ "-e", "js,gql", "--watch", "dist", "--watch", "typeDefs", "--delay", "500ms" ], "program": "./dist/index.js", "restart": true, "console": "integratedTerminal", "skipFiles": ["<node_internals>/**"] }
使用该配置时,直接点击VSCode调试启动按钮即可,修改代码后nodemon自动重启,调试器会自动关联新进程,完全不需要手动操作。
内容的提问来源于stack exchange,提问作者Alan Grosz
相关产品推荐
相关产品推荐

