VS Code-如何编写task.json以在单个任务中运行多个命令

时间:2020-03-15 16:09:24

标签: json visual-studio-code

我是Visual Studio Code的新手,正在尝试编写 tasks.json 来执行我的自定义生成任务,以便可以通过“ Terminal / Run Build Task ...”来生成项目。

但是,我的构建任务由多个命令组成,例如(例如Windows脚本):

preBuildTask1.bat
preBuildTask2.bat
...
build.bat
...
postBuildTask1.bat
postBuildTask2.bat
...

我看起来task.json仅允许我为“ command ”属性放一个命令,例如:

    "tasks": [
        {
            "label": "emcc",
            "type": "shell",
            "command": "buildTask.ps1",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
    ]
}

我当前的解决方法是将所有子任务放在Powershell脚本中,然后在task.json中调用该脚本,如上面代码中显示的“ buildTask.ps1 ”。 如果我可以为单个命令属性直接编写多个任务,将会更加方便。有人知道该怎么做吗?谢谢。

1 个答案:

答案 0 :(得分:1)

感谢Mark的建议,我在VS代码的 tasks.json 中找到了定义带有多个子任务的命令的解决方案:

解决方案1 ​​:只需将所有任务放入命令值中,并用“;”分隔:

"command": "task1;task2;task3"

解决方案2 :将子任务定义为环境变量,然后逐个调用它们。例如,在Windows上,我们可以使用powershell的命令 Invoke-Expression

首先,将所有子任务定义为环境变量:

"options": {
        "env": {
                "TASK_1": "emsdk_env",
                "TASK_2": "emcc canvas.cpp -o canvas.html --shell-file canvas_shell.html -s NO_EXIT_RUNTIME=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]'",
                "TASK_3": "http-server -p 8000"
            }
    },    

然后调用它们:

  "tasks": [
        {
            "label": "emcc",
            "type": "shell",
            "command": "Invoke-Expression $env:TASK_1; Invoke-Expression $env:TASK_2; Invoke-Expression $env:TASK_3",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        }
    ]

当子任务命令行很长并且在定义命令时不想写超长字符串时,第二种解决方案很有用。

当然,我们也可以创建一个脚本然后调用它,这是我最初的解决方案。