Чтобы заставить задачу в VS Code дождаться завершения сборки перед запуском другой команды на macOS, определите сборку как зависимость и установите "dependsOrder": "sequence" для зависимой от неё задачи. По умолчанию VS Code запускает несколько зависимостей параллельно, поэтому просто указать сборку первой недостаточно. В приведённом ниже примере команда npm run build выполняется до полного завершения перед npm test.

Определение сборки и зависимой задачи

В своём проекте откройте палитру команд с помощью ⇧⌘P, выполните Tasks: Configure Task или выберите Terminal > Configure Tasks. Создайте или отредактируйте файл .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"
    }
  ]
}

У зависимой задачи нет собственной команды: её цель — сначала запустить зависимость. Чтобы заставить её выполнить последующее действие, добавьте команду и тип задачи shell, например "type": "shell" и "command": "npm test", в задачу Test after build. Запустите эту родительскую задачу через Terminal > Run Task или команду палитры команд Tasks: Run Task. В документации VS Code указано, что dependsOn объединяет задачи, по умолчанию зависимости выполняются параллельно, а dependsOrder: "sequence" запускает их в указанном порядке. Integrate with External Tools via Tasks

В этом примере предполагается, что в файле package.json проекта определены работающие скрипты build и test, а npm доступен для VS Code. Замените команды на фактические команды сборки и последующих действий для вашего проекта. В macOS задачи оболочки VS Code запускаются через командную оболочку; если вы пишете команду одной строкой, добавьте кавычки или экранирование, необходимые этой оболочке. В частности, заключайте в кавычки пути, содержащие пробелы, например "command": "./scripts/build.sh 'Assets Folder'". Integrate with External Tools via Tasks

Что означает «ожидание» для сборки

Для обычной разовой сборки последовательность позволяет зависимости завершиться перед запуском следующей зависимости или родительской задачи. Это работает, когда команда сборки завершает работу по окончании процесса. Если вы перечисляете несколько зависимостей, выстройте их в цепочку в том порядке, в котором они указаны в dependsOn; без dependsOrder VS Code может запустить их одновременно.

Задача-наблюдатель (watch task) ведёт себя иначе, поскольку она рассчитана на непрерывную работу. В документации VS Code сказано, что фоновым задачам в последовательной цепочке зависимостей требуется сопоставитель проблем (problem matcher), определяющий, когда они «завершены». Для наблюдателя это означает определение сопоставителя, который распознаёт его состояние готовности; иначе VS Code не сможет определить, когда можно переходить к следующему шагу. Однократная сборка обычно не должна использовать режим наблюдения или параметр isBackground. Integrate with External Tools via Tasks

Запуск и диагностика распространённых проблем

Сохраните tasks.json, затем запустите Test after build через Terminal > Run Task. Проверьте вывод во встроенном терминале, чтобы убедиться, что фактическая команда запустилась и завершилась. Если родительская задача отсутствует или сборка не начинается первой, проверьте следующие моменты:

  • Метка в dependsOn в точности совпадает с label задачи сборки — включая пробелы и регистр букв.
  • Оба определения задач находятся внутри одного и того же массива tasks, а файл использует версию задач 2.0.0.
  • Параметр dependsOrder задан для родительской задачи наряду с dependsOn.
  • Команда оболочки работает из папки рабочей области, либо задан параметр options.cwd, если скрипт сборки находится во вложенной папке.
  • Если сборка является наблюдателем, настройте сопоставитель проблем для фонового режима, сигнализирующий о готовности; простое указание isBackground не сообщает VS Code о том, когда процесс готов.

VS Code документирует конфигурацию задач под конкретные платформы, включая секцию osx, но механизм упорядочивания зависимостей остаётся прежним: dependsOn и dependsOrder. Для этой цепочки задач не требуется придумывать собственную shell-команду «ожидания». Единственное задокументированное ограничение: длительно работающей фоновой задаче необходим сопоставитель проблем для сообщения о своей готовности. Appendix: Schema for tasks.json

Источники