若要让 VS Code 任务在 macOS 上运行另一个命令之前等待构建完成,请将构建定义为依赖项,并在依赖它的任务上设置 "dependsOrder": "sequence"。VS Code 默认并行运行多个依赖项,因此仅将构建排在第一位是不够的。以下示例会在执行 npm test 之前将 npm run build 运行至完成。

定义构建任务与依赖任务

在项目中,使用 ⇧⌘P 打开命令面板,运行 Tasks: Configure Task,或使用 终端 > 配置任务。在工作区中创建或编辑 .vscode/tasks.json。保留你仍需要的任何现有任务,并在其 tasks 数组中添加如下任务:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Build project",
      "type": "shell",
      "command": "npm run build",
      "problemMatcher": []
    },
    {
      "label": "Test after build",
      "dependsOn": ["Build project"],
      "dependsOrder": "sequence"
    }
  ]
}

该依赖任务本身没有命令:它的工作是首先运行依赖项。若要让它执行后续操作,请为 Test after build 添加命令和 shell 任务类型,例如 "type": "shell" 和 "command": "npm test"。通过 终端 > 运行任务 或命令面板的 Tasks: Run Task 命令运行该父任务。VS Code 的文档指出,dependsOn 用于组合任务,依赖项默认并行运行,而 dependsOrder: "sequence" 则按列出的顺序运行它们。Integrate with External Tools via Tasks

此示例假设项目的 package.json 定义了可正常工作的 build 和 test 脚本,且 VS Code 可以使用 npm。请将这些命令替换为你项目的实际构建和后续命令。在 macOS 上,VS Code shell 任务通过 shell 运行;如果将命令写为单个字符串,请包含其 shell 所需的引号或转义。特别是对于包含空格的路径,需要加上引号,例如 "command": "./scripts/build.sh 'Assets Folder'"。Integrate with External Tools via Tasks

对构建而言“等待”意味着什么

对于普通的单次构建,顺序执行会让依赖项先执行完毕,然后再启动下一个依赖项或父任务。这在构建命令完成后退出时有效。如果列出了多个依赖项,它们将按照在 dependsOn 中出现的顺序依次执行;如果没有 dependsOrder,VS Code 可能会同时启动它们。

监视(watch)任务的行为有所不同,因为它的设计初衷是持续运行。VS Code 文档说明,顺序依赖链中的后台任务需要一个问题匹配器(problem matcher)来检测它们何时“完成”。对于监视程序,这意味着需要定义一个能识别其就绪状态的匹配器;否则,VS Code 无法判断何时可以继续下一步。单次构建通常不应使用监视模式或 isBackground。Integrate with External Tools via Tasks

运行并排查常见问题

保存 tasks.json,然后从 终端 > 运行任务 中运行 Test after build。查看集成终端的输出,以确认实际命令已运行并结束。如果父任务缺失或构建未首先启动,请检查以下几点:

  • dependsOn 中的标签与构建任务的 label 完全匹配——包括空格和大小写。
  • 两个任务定义都在同一个 tasks 数组中,且文件使用的是任务版本 2.0.0。
  • dependsOrder 与 dependsOn 一起设置在父任务上。
  • shell 命令在工作区文件夹中可以正常运行,或者如果构建脚本位于子文件夹中,需设置 options.cwd。
  • 如果构建是监视程序,请配置一个能发出就绪信号的后台问题匹配器;仅设置 isBackground 并不会告知 VS Code 它何时就绪。

VS Code 记录了特定于平台的任务配置,包括 osx 部分,但依赖项排序机制是相同的:即 dependsOn 和 dependsOrder。你不需要为此任务链凭空捏造一个“等待”shell 命令。文档中规定的界限是,长时间运行的后台任务需要一个问题匹配器来报告其就绪状态。Appendix: Schema for tasks.json

参考来源