VSCode需用compounds组合多个独立node配置实现多服务调试,每个配置须设唯一name、不同port、"console": "integratedTerminal",并确保"request": "launch"及正确program路径。

launch.json里怎么配多个Node.js服务同时调试
VSCode原生不支持“一个配置启动多个进程”,必须用compounds组合多个独立配置。直接在configurations里写两个"type": "node"项是无效的——VSCode只会执行第一个。
- 每个服务单独定义一个
configuration,name要唯一(比如"API Server"、"Worker Service"),program指向各自入口文件,务必用${workspaceFolder}而非相对路径 -
compounds块里声明组合名和包含的name列表,例如:"configurations": ["API Server", "Worker Service"] - 关键细节:所有被组合的服务必须启用
"console": "integratedTerminal",否则第二个服务会卡住不动;如果某个服务依赖另一个先启动(如数据库连接),得手动等几秒再点“继续”
端口冲突导致“Cannot connect to the target”怎么办
多服务调试最常卡在这一步:两个node --inspect进程抢同一个9229端口。VSCode默认不自动分配调试端口,全靠你手动指定。
- 每个
configuration里必须显式加"port": 9230、"port": 9231等不同值,不能只依赖默认 - 检查终端输出是否真有
Debugger listening on ws://127.0.0.1:9230/——没有就说明没生效,常见原因是runtimeExecutable写成了"nodemon"但没配"restart": true,导致第一次启动后就退出 - Windows用户记得任务管理器里杀干净残留
node.exe;macOS/Linux执行pkill -f "node --inspect"比单靠VSCode停止更可靠
为什么改了代码断点不触发,但日志照常输出
这不是断点失效,是VSCode根本没把调试器 attach 到正在跑的进程上。多服务场景下,容易误以为“点了绿色按钮=全部启动”,其实只是按顺序启动,未必都进了调试模式。
- 确认每个
configuration的"request"是"launch"(不是"attach")——"attach"需要你先手动node --inspect,否则永远连不上 - 检查
program路径是否真实存在且可执行:比如"${workspaceFolder}/src/api/index.js",如果实际是dist/api/index.js,就得同步改路径或加"outFiles"映射 - TS项目特别注意:
"preLaunchTask"没配或失败时,program指向的是ts源码,但Node.js实际跑的是编译后的js,断点自然不命中
nvm切换Node版本后调试突然报require is not defined
这是VSCode的JS语言服务缓存了旧版本的运行时上下文,不是代码问题,也不影响实际执行,但断点和智能提示会乱。
- 关掉VSCode,终端执行
nvm use 18.17.0(你当前要用的版本),再重新打开项目文件夹 - 不要只在集成终端里
nvm use——VSCode启动时读取的是shell初始化时的环境变量,终端里切版本对编辑器本身无效 - 项目根目录加
.nvmrc文件写明18.17.0,VSCode配合nvm插件能自动识别,但需重启窗口才生效
多服务调试真正的麻烦不在配置本身,而在服务间依赖关系无法可视化——比如A服务调用B服务的HTTP接口,断点停在A里,你看不到B此刻的变量状态。这时候得靠console.log打标记,或者把B也设成"request": "attach"手动连过去,别指望一键全链路追踪。


















