Использование "preLaunchTasks" и "Именование задачи в коде Visual Studio"

Согласно документации, можно запустить программу перед отладкой:

Чтобы запустить задачу перед началом каждого сеанса отладки, preLaunchTask имя одной из задач, указанных в tasks.json.

Я не видел пример синтаксиса "именованной" задачи, но в документации схемы раскрывается свойство с именем taskName. Я попытался использовать это, чтобы связать мои задачи preLaunchTasks Json preLaunchTasks с задачей, но это не сработало. Когда я запустил свою программу, Visual Studio Code сообщил об этой ошибке:

Не удалось найти уникальную задачу 'launch-core'. Убедитесь, что задача существует и имеет уникальное имя.

Моя пользовательская "именованная" задача выглядела примерно так:

{
    "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",
}

Затем я попытался изменить имя свойства с taskName на просто name, основываясь на этой ссылке. Это тоже не сработало.

Intellisense не дает никаких подсказок о том, как назвать задачу.

Кто-нибудь знает, как однозначно назвать задачу в файле tasks.json? Какой синтаксис? Какое название недвижимости?

В конечном итоге я хотел бы выполнить два или три процесса node.js до запуска моего собственного приложения node.js. Например, я хотел бы запустить следующие три приложения до того, как мое приложение будет запущено в отладчике:

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

Если я работаю над Windows-боксом, моя задача может выглядеть примерно так:

{
    "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"
        ]
}

Вышеуказанная задача с использованием возможности start cmd. Я еще не уверен, как заставить несколько задач узла запускаться вместо одной, но я не могу даже запустить одну задачу из-за этой проблемы с именами задач.

Как я могу назвать задачу в файле tasks.json?

Ответ 1

Итак, если это все еще актуально, или если кто-то находит этот поток с той же проблемой, я просто понял, как это работает:

В tasks.json вам нужно создать массив 'задач - подсказка кода поможет вам в этом, - который содержит массив объектов. Внутри объекта у вас может быть пара ключей ключа 'taskName'.

Пример:

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

В моем случае мне пришлось запустить команду npm run-script webpack перед запуском моего проекта. В файле launch.json "preLaunchTask": "runwebpack" будет работать.

Примечание: в моем примере значение suppressTaskName истинно. Опуская его или установив его в значение false, VS-код добавит команду taskName после команды.

Более общий подход будет примерно таким:

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

В последнем примере вы можете расширить массив tasks другими сценариями для запуска.

Подсказка для моего использования: npm run- script выбирает, что делать из package.json файла scripts.

Изменить: это работает с VS Code 1.3.1

Ответ 2

FWIW, я использую VS Code 1.20.1, и вот как я получил свою preLaunchTask:

В launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
        "type": "node",
        "request": "launch",
        ...
        "preLaunchTask": "npm: build",
    }
  ]
}

В моем package.json:

{
  ...
  "scripts": {
     "build": "tsc"
     ...
  }
}

Ответ 3

Для конфигурации версии 2.0.0 вы теперь используете label вместо taskName.

package.json:

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

launch.json (мой источник находится в каталоге src а tsc компилируется в каталог 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

Я действительно видел только имя задачи, используемое по отношению к Gulp; Я уверен, что есть другие, но я ничего не понимаю. Возможно, это может помочь вам начать с того, что у вас уже есть?

Запустить задачу перед запуском в VSCODE

Ответ 5

Название вопроса:

"Использование" preLaunchTasks "и именование задачи в коде Visual Studio

Мне нужно было определить preLaunchTask *** s ***.

Вы можете настроить несколько задач, используя описанное здесь свойствоависимый

Например, составная задача в вашем tasks.json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Client Build",
            "command": "gulp",
            "args": ["build"],
            "options": {
                "cwd": "${workspaceRoot}/client"
            }
        },
        {
            "label": "Server Build",
            "command": "gulp",
            "args": ["build"],
            "options": {
                "cwd": "${workspaceRoot}/server"
            }
        },
        {
            "label": "Build",
            "dependsOn": ["Client Build", "Server Build"]
        }
    ]
}

Вы можете найти больше информации о задачах именования здесь.