Para fazer uma tarefa do VS Code esperar que uma compilação termine antes de executar outro comando no macOS, defina a compilação como uma dependência e configure "dependsOrder": "sequence" na tarefa que depende dela. O VS Code executa várias dependências em paralelo por padrão, portanto, apenas listar a compilação primeiro não é suficiente. O exemplo abaixo executa npm run build até a conclusão antes de npm test.

Definir a compilação e a tarefa dependente

No seu projeto, abra a Paleta de Comandos com ⇧⌘P, execute Tasks: Configure Task ou use Terminal > Configure Tasks. Crie ou edite .vscode/tasks.json no workspace. Mantenha quaisquer tarefas existentes que você ainda precise e adicione tarefas como estas dentro de seu array 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"
    }
  ]
}

A tarefa dependente não tem comando próprio: sua função é executar a dependência primeiro. Para fazê-la executar uma ação de acompanhamento, adicione um comando e o tipo de tarefa shell, por exemplo, "type": "shell" e "command": "npm test", em Test after build. Execute essa tarefa pai por meio de Terminal > Run Task ou pelo comando Tasks: Run Task da Paleta de Comandos. A documentação do VS Code afirma que dependsOn compõe tarefas, que as dependências são executadas em paralelo por padrão e que dependsOrder: "sequence" as executa na ordem listada. Integrate with External Tools via Tasks

Este exemplo pressupõe que o package.json do projeto define scripts build e test funcionais e que o npm está disponível para o VS Code. Substitua os comandos pelos comandos reais de compilação e de acompanhamento do seu projeto. No macOS, as tarefas de shell do VS Code são executadas por meio de uma shell; se você escrever um comando como uma única string, inclua as aspas ou os caracteres de escape de que a sua shell precisa. Em particular, coloque entre aspas caminhos que contenham espaços, como "command": "./scripts/build.sh 'Assets Folder'". Integrate with External Tools via Tasks

O que “esperar” significa para uma compilação

Para uma compilação normal de execução única (one-shot), a sequência permite que a dependência termine antes de iniciar a próxima dependência ou a tarefa pai. Isso funciona quando o comando de compilação é encerrado após a conclusão. Se você listar várias dependências, ordene-as na sequência em que aparecem em dependsOn; sem dependsOrder, o VS Code poderá iniciá-las juntas.

Uma tarefa de observação (watch task) se comporta de maneira diferente porque foi projetada para continuar em execução. O VS Code documenta que tarefas em segundo plano em uma cadeia de dependências sequencial precisam de um problem matcher que detecte quando elas estão “concluídas”. Para um watcher, isso significa definir um matcher que reconheça seu estado de prontidão; caso contrário, o VS Code não poderá determinar quando está pronto para prosseguir. Uma compilação única geralmente não deve usar o modo watch ou isBackground. Integrate with External Tools via Tasks

Executar e diagnosticar problemas comuns

Salve o tasks.json e, em seguida, execute Test after build a partir de Terminal > Run Task. Leia a saída do terminal integrado para confirmar se o comando real foi executado e concluído. Se a tarefa pai estiver ausente ou se a compilação não iniciar primeiro, verifique estes pontos:

  • O rótulo em dependsOn corresponde exatamente ao label da tarefa de compilação — incluindo espaços e letras maiúsculas/minúsculas.
  • Ambas as definições de tarefa estão dentro do mesmo array tasks, e o arquivo usa a versão de tarefa 2.0.0.
  • dependsOrder está configurado na tarefa pai, junto a dependsOn.
  • O comando de shell funciona a partir da pasta do workspace, ou defina options.cwd se o script de compilação estiver em uma subpasta.
  • Se a compilação for um watcher, configure um problem matcher de segundo plano que sinalize a prontidão; apenas definir isBackground não informa ao VS Code quando ela está pronta.

O VS Code documenta configurações de tarefas específicas da plataforma, incluindo uma seção osx, mas o mecanismo de ordenação de dependências é o mesmo: dependsOn e dependsOrder. Você não precisa de um comando de shell inventado para “esperar” nessa cadeia de tarefas. O limite documentado é que uma tarefa de segundo plano de longa execução precisa de um problem matcher para relatar sua prontidão. Appendix: Schema for tasks.json

Fontes