web-dev-qa-db-fra.com

Utiliser "preLaunchTasks" et nommer une tâche dans du code Visual Studio

Selon la documentation , il est possible de lancer un programme avant le débogage:

Pour lancer une tâche avant le début de chaque session de débogage, définissez la variable preLaunchTask sur le nom de l'une des tâches spécifiées dans tasks.json.

Je n'ai pas vu d'exemple de syntaxe d'une tâche "nommée", mais le schema documentation révèle une propriété appelée taskName. J'ai essayé de l'utiliser pour lier mon launch.json preLaunchTasks à la tâche, mais cela n'a pas fonctionné. Lorsque j'ai lancé mon programme, Visual Studio Code a signalé cette erreur:

Impossible de trouver une tâche unique 'launch-core'. Assurez-vous que la tâche existe et qu'elle porte un nom unique.

Ma tâche "nommée" personnalisée ressemblait à ceci:

{
    "taskName": "launch-core",
    "version": "0.1.0",
    "command": "C:\\utils\\mystuff.exe",
    // The command is a Shell script
    "isShellCommand": true,
    // Show the output window only if unrecognized errors occur.
    "showOutput": "silent",
}

J'ai ensuite essayé de changer le nom de la propriété de taskName à juste name, en fonction de ce lien . Cela aussi n'a pas fonctionné.

Intellisense ne donne aucune suggestion sur la façon de nommer une tâche.

Quelqu'un sait-il comment nommer de manière unique une tâche dans le fichier tasks.json? Quelle est la syntaxe? Quel est le nom de la propriété?

En fin de compte, j'aimerais exécuter deux ou trois processus node.js avant le lancement de ma propre application node.js. Par exemple, j'aimerais que les trois applications suivantes soient lancées avant que mon application ne soit lancée dans le débogueur:

sh -c 'cd ./manager/ && node manager.js'
sh -c 'cd ./adapter/ && node adapter.js'
sh -c 'cd ./core/ && node core.js'

Si je travaille sur une machine Windows, ma tâche pourrait ressembler à ceci:

{
    "taskName": "core-launch",
    "version": "0.1.0",

    // The command is tsc. Assumes that tsc has been installed using npm install -g TypeScript
    "command": "start",

    // The command is a Shell script
    "isShellCommand": true,

    // Show the output window only if unrecognized errors occur.
    "showOutput": "silent",

    // args is the HelloWorld program to compile.
    "args": [
        "ACD-Manager",
        "/B",
        "/D",
        "./manager/",
        "node",
        "manager.js"
        ]
}

La tâche ci-dessus utilisant la fonctionnalité cmd start . Je ne sais pas encore comment faire en sorte que plusieurs tâches de nœud se lancent au lieu d'une, mais je ne parviens même pas à lancer une tâche à cause de ce problème de nommage de tâche. 

Comment nommer une tâche dans le fichier tasks.json?

16
Brent Arias

Donc, si cela reste pertinent, ou si quelqu'un trouve ce fil avec le même problème, je viens juste de comprendre comment cela fonctionne:

Dans le fichier tasks.json , vous devez créer un indice de tableau 'tasks' - qui vous aidera avec cela - qui contient un tableau d'objets. À l'intérieur d'un objet, vous pouvez avoir la paire 'taskName' clé-valeur.

Exemple:

{
    "version": "0.1.0",
    "command": "npm",
    "isShellCommand": true,
    "args": ["run-script", "webpack"],
    "showOutput": "always",
    "tasks": [
        { 
            "taskName": "runwebpack",
            "suppressTaskName": true
        }
    ]
}

Dans mon cas, je devais exécuter la commande npm run-script webpack avant de lancer mon projet. Dans le fichier launch.json , le "preLaunchTask": "runwebpack" fonctionnera maintenant.

Remarque: la variable suppressTaskName est vraie dans mon exemple. Si vous l'omettez ou si vous le définissez sur false, VS Code ajoute la variable taskName après la commande.

Une approche plus générale serait quelque chose comme ceci:

{
    "version": "0.1.0",
    "command": "npm",
    "isShellCommand": true,
    "args": ["run-script"],
    "showOutput": "always",
    "tasks": [
        { "taskName": "webpack" }
    ]
}

Avec ce dernier exemple, vous pouvez également étendre le tableau tasks avec d’autres scripts.

Astuce pour mon utilisation: npm run-script recherche ce qu'il faut faire à partir de l'objet scripts package.json file.

Edit: cela fonctionne avec VS Code 1.3.1

15
zeroxx1986

Pour la configuration de la version 2.0.0, vous utilisez maintenant label au lieu de taskName.

package.json:

...
"scripts": {
    "tsc": "tsc",
    ...
}
...

launch.json (Ma source se trouve dans le répertoire src et tsc est compilée dans le répertoire dist):

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "preLaunchTask": "Compile",
            "name": "Launch Program",
            "program": "${workspaceFolder}/src/index.ts",
            "outFiles": [
                "${workspaceFolder}/dist/**/*.js"
            ],
            "protocol": "inspector",
            "sourceMaps": true
        }
    ]
}

tasks.json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile",
            "type": "npm",
            "script": "tsc",
            "problemMatcher": []
        }
    ]
}
4
Eli Algranti

J'ai seulement vraiment vu le nom de tâche utilisé en relation avec Gulp; Je suis sûr qu'il y en a d'autres, mais rien que je connaisse bien. Peut-être que cela peut vous aider à commencer avec ce que vous avez déjà?

Exécuter une tâche de pré-lancement dans VSCODE

0
LimpingNinja