在VSCode中定义多个任务

Fra*_*ell 81 visual-studio-code vscode-tasks

我已经看到可以在VSCode中定义任务.但我不确定如何在tasks.json文件中定义多个任务.

Dan*_*Dan 36

以防它有助于某人...... 如果你没有/想要gulp/grunt/etc ...或者一个额外的shell脚本代理你的任务命令,那么"npm run"已经存在.

这适用于webpack和mocha,如"Build and Test",Shift+ Ctrl+ B,Shift+ Ctrl+T

.vscode/tasks.json:

{
  "name": "npmTask",
  //...
  "suppressTaskName": true,
  "command": "npm",
  "isShellCommand": true,
  "args": [
    "run"
  ],
  "tasks": [
    {
      //Build Task
      "taskName": "webpack",
      //Run On Shift+Ctrl+B
      "isBuildCommand": true,
      //Don't run when Shift+Ctrl+T
      "isTestCommand": false,
      // Show the output window if error any
      "showOutput": "silent",
      //Npm Task Name
      "args": [
        "webpack"
      ],
      // use 2 regex:
      // 1st the file, then the problem       
      "problemMatcher": {
        "owner": "webpack",
        "severity": "error",
        "fileLocation": "relative",
        "pattern": [
          {
            "regexp": "ERROR in (.*)",
            "file": 1
          },
          {
            "regexp": "\\((\\d+),(\\d+)\\):(.*)",
            "line": 1,
            "column": 2,
            "message": 3
          }
        ]
      }
    },
    {
      //Test Task   
      "taskName": "mocha",
      // Don't run on Shift+Ctrl+B
      "isBuildCommand": false,
      // Run on Shift+Ctrl+T
      "isTestCommand": true,
      "showOutput": "always",
      "args": [
        "mocha"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

的package.json:

{
  ...
  "scripts": {
    "webpack": "webpack",
    "mocha": "/usr/bin/mocha"
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)


Hur*_*elu 13

让我更好地理解这一点的是传递给命令的参数序列.对某些人来说可能是显而易见的,但在文档中并不清楚.

省略一些字段只关注正在发送的命令:

{ "command": "myCommand"
  "args": ["myCommandArguments"],
  "tasks" : [ 
    { "taskName": "myTask",
      "args": ["myTaskArguments"],
      "suppressTaskName": false,
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

上面的定义将导致以下命令:

myCommand myCommandArguments myTaskArguments myTask
Run Code Online (Sandbox Code Playgroud)

任务名称myTask始终为最后一个.从版本0.4开始,它可以省略"suppressTaskName": true.


Ale*_*ack 12

试试这个

{
    "version": "0.1.0",
    "command": "cmd",
    "isShellCommand": true,
    "args": ["/C"],
    "tasks": [
        {
            "taskName": "install",
            "args": ["npm install"]
        },
        {
            "taskName": "build",
            "args": ["gulp build"],
            "isBuildCommand": true,
            "problemMatcher": "$gulp-tsc"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)


dja*_*ham 10

我使用以下tasks.json文件来运行多个TypeScript构建方案.我在每个文件夹中放了一个tsconfig.json文件,这样我就可以单独调整每个文件夹的输出.只需确保禁止任务名称,因为它会尝试将其放在命令字符串中.

{
    "version": "0.1.0",
    "command": "tsc",
    "showOutput": "always",
    "isShellCommand": true,
    "args": [],
    "windows": {
        "command": "tsc",
        "showOutput": "always",
        "isShellCommand": true
    },
    "tasks": [
        {
            "taskName": "Build the examples",
            "suppressTaskName": true,
            "isBuildCommand": false,            
            "args": ["-p", "./source/examples", "--outDir", "./script/examples"],
            "problemMatcher": "$tsc"
        },
        {
            "taskName": "Build the solution",            
            "suppressTaskName": true,
            "isBuildCommand": false,        
            "args": ["-p", "./source/solution", "--outDir", "./script/solution"],
            "problemMatcher": "$tsc"
        }   
    ]
}
Run Code Online (Sandbox Code Playgroud)

这就是文件夹结构的样子,其中/ script是输出根,/ source是输入根.两个文件夹都引用/ typingd文件夹和/ typings文件夹中的类型声明.TypeScript仅限于在外部引用中使用相对路径,因此如果这些文件夹结构相似,它有助于简化操作.

TypeScript多构建文件夹结构

哦,是的,如果你将它们标记为非构建并覆盖构建密钥以从列表中选择特定任务,则可以更容易地选择性地启动它们,就像这样.

// Place your key bindings in this file to overwrite the defaults
[
    { "key": "ctrl+shift+b", "command": "workbench.action.tasks.runTask" }
]
Run Code Online (Sandbox Code Playgroud)

更新:如果你愿意,你总是可以完全流氓.可能有更好的方法来处理args,但目前在OSX下这对我有用.

{
  "version": "0.1.0",
  "isShellCommand": true,
  "linux": { "command": "sh", "args": ["-c"] },
  "osx": { "command": "sh", "args": ["-c"] },
  "windows": { "command": "powershell", "args": ["-Command"] },
  "tasks": [
    {
      "taskName": "build-models",
      "args": ["gulp build-models"],
      "suppressTaskName": true,
      "isBuildCommand": false,
      "isTestCommand": false
    },
    {
      "taskName": "run tests",
      "args": ["mocha ${workspaceRoot}/test"],
      "suppressTaskName": true,
      "isBuildCommand": false,
      "isTestCommand": false
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 有关运行多个独立命令的方法,请参阅更新. (3认同)
  • 这是一个非常明显的例子!这可能是 MS 打算使用 tasks.json 的方式(很遗憾他们没有自己解释这一点)。唯一的问题是:如果我有不同的命令行任务怎么办?(我需要一个 tsc 任务和一个 node-sass 任务) (2认同)

Jon*_*win 7

我不知道对此的正确答案(也想知道),但我的丑陋的解决方法,以防它帮助任何人.我在Windows上,我最终创建了一个简单的批处理脚本,可以简单地包含

"%1" "%2"
Run Code Online (Sandbox Code Playgroud)

然后我的tasks.json看起来像

{
    "version": "0.1.0",
    "command": "c:\\...\\mytasks.bat"
    "tasks" : [
        {
            "taskName": "myFirstTask",
            "args": "c:\\...\\task1.exe", "${file}"],
        },
        {
            "taskName": "mySecondTask",
            "args": "c:\\...\\task2.exe", "${file}"],
        },
    ]
}
Run Code Online (Sandbox Code Playgroud)


Dir*_*mer 6

您可以在tasks属性中列出多个任务.就像是:

"tasks": [
    {
        "taskName": "build",
        ...
    },
    {
         "taskName": "package",
         ...
    }
]
Run Code Online (Sandbox Code Playgroud)

  • 但是,他们必须使用相同的命令.您只能改变参数. (7认同)

归档时间:

查看次数:

33857 次

最近记录:

6 年,10 月 前