使用 "preLaunchTasks" 并在 Visual Studio 代码中命名任务

Using "preLaunchTasks" and Naming a Task in Visual Studio Code

根据the documentation,可以在调试前启动程序:

To launch a task before the start of each debug session, set the preLaunchTask to the name of one of the tasks specified in tasks.json.

我没有看到 "named" 任务的示例语法,但是 schema documentation 揭示了一个名为 taskName 的 属性。我尝试使用它来 link 我的 launch.json preLaunchTasks 来完成任务,但它没有用。当我启动我的程序时,Visual Studio 代码报告了这个错误:

Could not find a unique task 'launch-core'. Make sure the task exists and that it has a unique name.

我的自定义 "named" 任务看起来像这样:

{
    "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 更改为 namebased on this link。那也没用。

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

以上任务使用cmd start capability。我还不确定如何启动多个节点任务而不是一个,但由于这个任务命名问题,我什至无法启动一个任务。

如何在 tasks.json 文件中命名任务?

我只真正看到与 Gulp 有关的任务名称;我敢肯定还有其他人,但我没有太多见识。也许这可以让您从已有的开始?

Run a pre-launch task in VSCODE

所以,如果它仍然相关,或者如果有人发现这个线程有同样的问题,我刚刚弄清楚它是如何工作的:

tasks.json中,你需要创建一个'tasks'数组 - 代码提示会帮助你with that - 它包含一个对象数组。在对象内部,您可以拥有 '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 Code 在命令后附加 taskName

更通用的方法是这样的:

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

对于后一个示例,您可以将 tasks 数组与其他脚本一起扩展为 运行。

我的使用提示:npm 运行-script 从 package.json 文件中获取要执行的操作scripts 对象。

编辑:这适用于 VS Code 1.3.1

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"
     ...
  }
}

对于版本 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": []
        }
    ]
}

题目是:

"Using “preLaunchTasks” and Naming a Task in Visual Studio Code

我需要定义 preLaunchTask***s***。

您可以使用 属性 描述的 here

配置多个任务

例如,您 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"]
        }
    ]
}

您可以找到有关命名任务的更多信息here

对于vscode 1.36.1 (1.36.1):

tasks.json:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build:tsc",
      "type": "npm",
      "script": "build:tsc"
    },
    {
      "label": "clean",
      "type": "npm",
      "script": "clean"
    },
    {
      "label": "build",
      "dependsOrder": "sequence",
      "dependsOn": ["clean", "build:tsc"]
    }
  ]
}

launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/dist/main.js",
      "preLaunchTask": "build",
      "outFiles": ["${workspaceFolder}/dist/**/*.js"],
      "console": "integratedTerminal"
    }
  ]
}

在运行宁node ${workspaceFolder}/dist/main.js之前,preLaunchTask首先会运行build任务,其中包括两个子任务:cleanbuild。它会先运行clean任务,然后运行build任务。

您可以将任务的标签指定为preLaunchTask选项。