VSCode默认不自动顺序执行多个构建脚本,必须用dependsOn显式声明依赖且匹配label(大小写、空格严格一致),并加"dependsOrder":"sequence"才能串行;依赖任务需设"group",失败时后续任务跳过,type必须为"shell"才支持npm script链式调用。

VSCode 本身不支持“自动按顺序执行多个构建脚本”,必须靠 dependsOn 显式声明依赖关系,且默认是并行启动——想串行、想失败中断、想复用终端,全得手动配。
dependsOn 必须匹配 label,大小写+空格都不能错
VSCode 不查命令或文件,只认 label 字符串。你写 "dependsOn": ["build"],就得确保另一个任务的 label 确实是 "build"(不是 "Build"、"build:prod" 或带多余空格的 "build ")。
- 被依赖的任务也必须有
"group": "build"或"group": "test",否则 VS Code 不识别它为可依赖项 - 多个依赖写成数组:
"dependsOn": ["lint", "test"],默认并行;加"dependsOrder": "sequence"才强制串行 - 任一依赖任务 exit code ≠ 0,后续任务直接跳过(前提是没设
"presentation": {"clear": true}干扰状态判断)
type: "shell" 才能安全链式调用 npm script
写 "command": "npm run build" 只在 "type": "shell" 下有效;换成 "type": "process" 会把整个字符串当一个可执行文件名找,必然报 command not found。
-
"type": "shell"经过系统 shell 解析,支持&&、||、环境变量展开,适合npm run lint && npm run build这类组合 - 但 Windows 的 cmd.exe 不认
export NODE_ENV=production,要跨平台就改用"env": {"NODE_ENV": "production"} - 如果命令含空格路径或引号参数(如
--config "path/to/config.json"),别塞进command,拆到args数组里更稳
串行执行时 terminal 面板复用与卡死问题
默认每个任务开新终端面板,快速连点 Ctrl+Shift+B 会堆出一堆窗口;而用了 "isBackground": true 却没配好 problemMatcher,任务就永远显示“正在运行…”。
- 加
"presentation": {"panel": "shared", "clear": true}强制复用同一面板,并清屏避免日志混杂 - 后台任务(如
tsc --watch)必须配"isBackground": true+ 匹配启动成功的输出 pattern(如"$tsc-watch"),否则 VS Code 不知道它已就绪 - 想让串行任务共用一个终端输出流,就别对每个任务都设
"presentation": {"echo": true},统一由主任务控制输出
真正容易被忽略的:工作目录和环境变量隔离
VS Code 启动的任务进程不加载你的 ~/.zshrc 或 %USERPROFILE%AppDataRoaming
vmsettings.txt,所以 pnpm、nvm 切换的 node 版本、甚至 go 的 $GOPATH 全都不生效。
- 最稳做法:在
tasks.json里显式写绝对路径,比如"command": "/opt/homebrew/bin/pnpm"(macOS)或"command": "C:\Program Files\nodejs\npm.cmd"(Windows) - 次选方案:启用
terminal.integrated.inheritEnv设置,并确保 VS Code 是从终端启动(code .),而非桌面图标 -
"cwd"默认是 workspace 根目录,但如果你的package.json在子目录,就得用"${workspaceFolder}/client"显式指定


















