Para hacer que una tarea de VS Code espere a que finalice una compilación antes de ejecutar otro comando en macOS, defina la compilación como una dependencia y configure "dependsOrder": "sequence" en la tarea que depende de ella. VS Code ejecuta múltiples dependencias en paralelo de forma predeterminada, por lo que listar la compilación en primer lugar no es suficiente. El siguiente ejemplo ejecuta npm run build hasta que se completa antes de npm test.

Definir la compilación y la tarea dependiente

En su proyecto, abra la paleta de comandos con ⇧⌘P, ejecute Tasks: Configure Task o use Terminal > Configure Tasks. Cree o edite .vscode/tasks.json en el espacio de trabajo. Conserve cualquier tarea existente que aún necesite y agregue tareas como estas dentro de su arreglo 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"
    }
  ]
}

La tarea dependiente no tiene un comando propio: su función es ejecutar primero la dependencia. Para hacer que realice una acción posterior, agregue un comando y el tipo de tarea shell, por ejemplo "type": "shell" y "command": "npm test", a Test after build. Ejecute esa tarea principal a través de Terminal > Run Task o mediante el comando Tasks: Run Task de la paleta de comandos. La documentación de VS Code indica que dependsOn compone tareas, las dependencias se ejecutan en paralelo de forma predeterminada y dependsOrder: "sequence" las ejecuta en el orden indicado. Integrate with External Tools via Tasks

Este ejemplo asume que el archivo package.json del proyecto define scripts funcionales de build y test, y que npm está disponible para VS Code. Reemplace los comandos con los comandos reales de compilación y de seguimiento de su proyecto. En macOS, las tareas de shell de VS Code se ejecutan a través de un shell; si escribe un comando como una sola cadena, incluya las comillas o el escape que dicho shell requiera. En particular, encierre entre comillas las rutas que contengan espacios, como "command": "./scripts/build.sh 'Assets Folder'". Integrate with External Tools via Tasks

Qué significa "esperar" para una compilación

Para una compilación normal de una sola ejecución, la secuencia permite que la dependencia termine antes de iniciar la siguiente dependencia o la tarea principal. Esto funciona cuando el comando de compilación finaliza tras completarse. Si enumera varias dependencias, ordénelas en la secuencia en que aparecen en dependsOn; sin dependsOrder, VS Code podría iniciarlas al mismo tiempo.

Una tarea en modo de observación (watch task) se comporta de manera diferente porque está pensada para seguir ejecutándose. VS Code documenta que las tareas en segundo plano en una cadena de dependencias secuencial necesitan un comparador de problemas (problem matcher) que detecte cuándo están "listas". Para un observador, eso significa definir un comparador que reconozca su estado de preparación; de lo contrario, VS Code no puede determinar cuándo está listo para continuar. Una compilación única por lo general no debería usar el modo de observación ni isBackground. Integrate with External Tools via Tasks

Ejecutar y diagnosticar problemas comunes

Guarde tasks.json, luego ejecute Test after build desde Terminal > Run Task. Revise la salida del terminal integrado para confirmar que el comando real se ejecutó y finalizó. Si falta la tarea principal o la compilación no se inicia primero, verifique los siguientes puntos:

  • La etiqueta en dependsOn coincide exactamente con el label de la tarea de compilación, incluidos los espacios y las mayúsculas/minúsculas.
  • Ambas definiciones de tareas se encuentran dentro del mismo arreglo tasks y el archivo utiliza la versión de tarea 2.0.0.
  • dependsOrder está configurado en la tarea principal, junto con dependsOn.
  • El comando de shell funciona desde la carpeta del espacio de trabajo, o configure options.cwd si el script de compilación reside en una subcarpeta.
  • Si la compilación es un observador, configure un comparador de problemas en segundo plano que indique que está listo; simplemente establecer isBackground no le indica a VS Code cuándo está preparado.

VS Code documenta configuraciones de tareas específicas de la plataforma, incluida una sección osx, pero el mecanismo de ordenamiento de dependencias es el mismo: dependsOn y dependsOrder. No necesita inventar un comando de shell de "espera" para esta cadena de tareas. El límite documentado es que una tarea en segundo plano de larga duración necesita un comparador de problemas para reportar que está lista. Appendix: Schema for tasks.json

Fuentes