Pour qu'une tâche VS Code attende la fin d'un build avant d'exécuter une autre commande sur macOS, définissez le build comme une dépendance et ajoutez "dependsOrder": "sequence" sur la tâche qui en dépend. VS Code exécute par défaut plusieurs dépendances en parallèle, il ne suffit donc pas de lister le build en premier. L'exemple ci-dessous exécute npm run build jusqu'à son terme avant npm test.
Définir le build et la tâche dépendante
Dans votre projet, ouvrez la palette de commandes avec ⇧⌘P, exécutez Tâches : Configurer la tâche (Tasks: Configure Task), ou utilisez Terminal > Configurer les tâches. Créez ou modifiez .vscode/tasks.json dans l'espace de travail. Conservez les tâches existantes dont vous avez encore besoin, et ajoutez des tâches comme celles-ci à l'intérieur de son tableau 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 tâche dépendante n'a pas de commande propre : son rôle est d'exécuter la dépendance en premier. Pour lui faire effectuer une action de suivi, ajoutez une commande et un type de tâche shell, par exemple "type": "shell" et "command": "npm test", à Test after build. Exécutez cette tâche parente via Terminal > Exécuter la tâche ou la commande Tâches : Exécuter la tâche de la palette de commandes. La documentation de VS Code indique que dependsOn compose les tâches, que les dépendances s'exécutent en parallèle par défaut, et que dependsOrder: "sequence" les exécute dans l'ordre indiqué. Integrate with External Tools via Tasks
Cet exemple suppose que le fichier package.json du projet définit des scripts build et test fonctionnels et que npm est accessible pour VS Code. Remplacez les commandes par les véritables commandes de build et de suivi correspondant à votre projet. Sur macOS, les tâches shell de VS Code s'exécutent via un shell ; si vous écrivez une commande sous la forme d'une chaîne unique, incluez les guillemets ou les caractères d'échappement dont son shell a besoin. En particulier, mettez entre guillemets les chemins contenant des espaces, par exemple "command": "./scripts/build.sh 'Assets Folder'". Integrate with External Tools via Tasks
Ce que signifie « attendre » pour un build
Pour un build ponctuel normal, la séquence permet à la dépendance de se terminer avant de lancer la dépendance suivante ou la tâche parente. Cela fonctionne lorsque la commande de build s'arrête une fois terminée. Si vous listez plusieurs dépendances, ordonnez-les dans l'ordre dans lequel elles apparaissent dans dependsOn ; sans dependsOrder, VS Code risque de les démarrer ensemble.
Une tâche de surveillance (watch) se comporte différemment car elle a vocation à continuer de s'exécuter. VS Code documente que les tâches en arrière-plan au sein d'une chaîne de dépendances séquentielles nécessitent un détecteur de problèmes (problem matcher) qui identifie le moment où elles ont « terminé ». Pour un watcher, cela signifie définir un matcher qui reconnaît son état prêt ; sinon, VS Code ne peut pas déterminer quand il est prêt à passer à la suite. Un build ponctuel ne devrait généralement pas utiliser le mode watch ni isBackground. Integrate with External Tools via Tasks
L'exécuter et diagnostiquer les problèmes courants
Enregistrez tasks.json, puis exécutez Test after build depuis Terminal > Exécuter la tâche. Lisez la sortie du terminal intégré pour confirmer que la commande a bien été exécutée et s'est terminée. Si la tâche parente est manquante ou que le build ne démarre pas en premier, vérifiez ces points :
- Le libellé dans
dependsOncorrespond exactement aulabelde la tâche de build — y compris les espaces et les majuscules/minuscules. - Les deux définitions de tâches se trouvent dans le même tableau
tasks, et le fichier utilise la version de tâche2.0.0. dependsOrderest défini sur la tâche parente, aux côtés dedependsOn.- La commande shell fonctionne depuis le dossier de l'espace de travail, ou définissez
options.cwdsi le script de build réside dans un sous-dossier. - Si le build est un watcher, configurez un détecteur de problèmes en arrière-plan qui signale qu'il est prêt ; le simple fait de définir
isBackgroundn'indique pas à VS Code le moment où il est prêt.
VS Code documente la configuration des tâches spécifique à chaque plateforme, y compris une section osx, mais le mécanisme d'ordonnancement des dépendances est le même : dependsOn et dependsOrder. Vous n'avez pas besoin d'inventer une commande shell d'attente (« wait ») pour cette chaîne de tâches. La limite documentée est qu'une tâche d'arrière-plan de longue durée nécessite un détecteur de problèmes pour signaler qu'elle est prête. Appendix: Schema for tasks.json
Sources
- Integrate with External Tools via Tasks — Visual Studio Code
- Appendix — Visual Studio Code