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

Hon*_*ang 7 json visual-studio-code

我是 Visual Studio Code 的新手,并尝试编写tasks.json来执行我的自定义构建任务,以便我可以通过“终端/运行构建任务...”来构建我的项目。

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

preBuildTask1.bat
preBuildTask2.bat
...
build.bat
...
postBuildTask1.bat
postBuildTask2.bat
...
Run Code Online (Sandbox Code Playgroud)

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

    "tasks": [
        {
            "label": "emcc",
            "type": "shell",
            "command": "buildTask.ps1",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
    ]
}
Run Code Online (Sandbox Code Playgroud)

我当前的工作是将所有子任务放入 powershell 脚本中,然后在tasks.json 中调用该脚本,如上面代码中所示的“ buildTask.ps1 ”。如果我可以直接为单个命令属性编写多个任务,那就更方便了。有人知道该怎么做吗?谢谢。

Hon*_*ang 4

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

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

"command": "task1;task2;task3"
Run Code Online (Sandbox Code Playgroud)

方案二:将子任务定义为环境变量,然后一一调用。例如,在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"
            }
    },    
Run Code Online (Sandbox Code Playgroud)

然后,调用它们:

  "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": []
        }
    ]
Run Code Online (Sandbox Code Playgroud)

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

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