vscode实现多进程并行需明确隔离生命周期:终端分栏最简单(ctrl+`后split terminal),tasks.json配isbackground:true和dedicated面板,或用concurrently统一管理依赖与日志。

不能靠右键“运行代码”或单个终端命令实现真正并行——必须用分栏、tasks.json 或进程管理器明确隔离进程生命周期。
终端分栏是最简单可靠的并行方式
VSCode 的集成终端分栏本质是启动多个独立 shell 进程,互不阻塞、各自保活,适合手动调试或临时组合服务。
- 按
Ctrl+`打开第一个终端,执行node src/api/index.js - 右键该终端标签 → 选
Split Terminal(或按Ctrl+Shift+5),得到第二个面板 - 在新面板中执行
node src/worker/index.js,两个服务完全独立 - 注意:分栏后默认继承当前目录,如果之前
cd过,新面板也会进错路径——建议先cd到对应子目录再分栏,或手动cd - 关闭某个分栏的
×只隐藏面板,进程仍在后台跑;要停服务得进对应面板按Ctrl+C
tasks.json 配 isBackground: true 实现一键启动
适合需要复用、可触发、带路径隔离的场景(比如每次打开项目就自动启后端+数据库 mock)。
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
- 每个任务必须设
"isBackground": true,否则第二个任务会卡住等第一个退出 - 显式指定
"options": { "cwd": "${workspaceFolder}/services/api" },避免require()找不到模块 - 加
"presentation": { "panel": "dedicated" },让每个任务独占一个终端面板,日志不混 - 别写
"command": "npm run dev & npm run worker"——&在 Windows 下失效,且 VSCode 无法追踪子进程 - 示例片段:
{ "label": "start:api", "type": "shell", "command": "node", "args": ["src/api/index.js"], "options": { "cwd": "${workspaceFolder}/services/api" }, "isBackground": true, "problemMatcher": [] }
用 concurrently 管理复杂多服务依赖
当服务间有启动顺序、失败联动、日志前缀区分等需求时,concurrently 是事实标准。
- 先装
npm install --save-dev concurrently - 在
package.json中定义:"scripts": { "dev:all": "concurrently -k -n "API,WORKER,DB" \ "npm run dev:api" \ "npm run dev:worker" \ "npm run db:mock"" } -
-k表示任一进程崩溃则全部退出,-n加前缀让日志可区分 - VSCode 任务只需调用这一条:
"command": "npm run dev:all",配合isBackground: true - 注意:不要在
concurrently命令里混用nodemon和普通node启动——热重载可能干扰 attach 调试
为什么 launch.json 里的多配置不等于“同时运行”
调试配置(launch.json)和运行服务(终端 / tasks)是两套机制。误把调试当运行,是断点不触发、端口冲突的主因。
-
launch.json的configurations数组里写多个"type": "node",只是为多进程准备调试入口,不是运行命令 - 想真正“运行”,得靠终端分栏、
tasks.json或concurrently;调试只是附加能力 - 如果用了
compounds启动多个request: "launch",每个服务仍需自己配"port": 9230等,否则第二个会因端口被占而静默失败 - 常见错误现象:
Cannot connect to the target—— 八成是没设port,或终端里根本没看到Debugger listening on ws://127.0.0.1:9230/
最易被忽略的一点:分栏终端或 concurrently 启动的服务,默认不进入调试模式。断点要生效,还得单独配 launch.json 并手动 attach,或者确保每个服务启动时带 --inspect-brk=9230 参数。










