Visual Studio Code使用nodemon调试10秒后出现ECONNREFUSED错误
解决VS Code + nodemon调试TypeScript超时断开的问题
嘿,结合你用Windows7、Node.js v8.9.4的情况,我来帮你排查几个大概率的问题——都是旧版本环境里常见的坑,给你几个针对性的解决方向:
1. 新版nodemon和Node.js v8.9.4不兼容
现在最新版的nodemon早就不再支持Node.js v8了(官方要求最低Node v10),你全局装的nodemon如果是新版本,肯定会和你的Node版本出现兼容性冲突,导致调试连接不稳定,过几秒就断开。
搞定办法:
- 先卸载全局的nodemon:
npm uninstall -g nodemon - 装个适配Node v8的旧版本,比如v2.0.20(这个版本是最后一批支持Node v8的):
npm install -g nodemon@2.0.20 - 怕全局版本搞乱的话,也可以在项目本地装:
npm install nodemon@2.0.20 --save-dev,然后把launch.json里的runtimeExecutable改成${workspaceFolder}/node_modules/.bin/nodemon(Windows下不用加.cmd后缀,VS Code能自动识别)
2. VS Code调试工具和旧Node版本不匹配
VS Code自带的JavaScript调试器(Debugger for Node.js)现在已经逐渐放弃对Node v8的支持了,新版本的VS Code和Node v8的调试协议不兼容,就会出现连接超时的情况。
搞定办法:
- 要么装个旧版本的VS Code,比如1.60.x系列(这个版本还能完美兼容Node v8),去VS Code官网的历史版本页面就能找到
- 要么在VS Code里安装旧版的
Node Debug扩展(注意不是默认的那个调试器),这个扩展专门适配老Node版本的调试需求
3. 微调launch.json的配置参数
你的现有配置可以加几个参数来适配旧环境,试试这个配置:
{ "type": "node", "request": "launch", "name": "nodemon", "runtimeExecutable": "nodemon", "program": "${workspaceFolder}/index.ts", "outFiles": ["${workspaceFolder}/dist/*.js"], "restart": true, "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "timeout": 30000, // 把超时时间拉长到30秒,给旧Node足够的启动时间 "protocol": "inspector" // 指定用inspector协议,Node v8已经支持这个了 }
另外一定要确认你的tsconfig.json里开了sourceMap: true,不然断点没法正确映射到TS文件上。
4. Windows7的系统防火墙/杀毒软件拦截
Windows7的防火墙或者本地杀毒软件可能会拦截调试端口的连接,导致超时断开。
搞定办法:
- 先临时关掉Windows防火墙试试,如果调试正常了,就给VS Code和Node.js添加防火墙允许规则
- 检查下你的杀毒软件,看看有没有把Node的网络连接给拦截了
还有个小技巧可以试试:先手动用nodemon --inspect dist/index.js启动项目,然后在VS Code里用“Attach”模式调试,比“Launch”模式更稳定,对应的launch.json配置是:
{ "type": "node", "request": "attach", "name": "Attach to nodemon", "restart": true, "port": 9229, // Node调试的默认端口 "outFiles": ["${workspaceFolder}/dist/*.js"] }
内容的提问来源于stack exchange,提问作者user6643481




