有没有办法使用VSCode tasks.json dependsOn 从其他项目中添加依赖项

问题描述

我有一个包含多个项目的多根工作区。每个项目都有自己的构建任务,调用外部脚本进行构建。一个项目需要在构建之前构建所有其他项目,因为需要链接它们。从现在开始,我将把它称为“应用程序”项目。

我已尝试在应用程序的 tasks.json 构建配置中使用dependsOn,但如果指定了命令,则引用外部构建任务的名称无效,如果未指定命令,则会引发错误。例如:

  {
      "label": "build-app","group": "build","dependsOn": [
          "devices"
           "app",],"dependsOrder": "sequence","problemmatcher": []
  }

给出这个错误,即使任务 'devices' 确实存在并且在 devices/tasks.json 文件中工作:

Couldn't resolve dependent task 'devices' in workspace folder 'file:///home/simon/git-repos/workspace/app'

在这表明它不在当前工作区文件夹之外搜索,所以我尝试在 .code-workspace 文件中创建一个顶级“工作区”任务并在那里引用构建任务:

  {
      "label": "build-app","problemmatcher": []
  }

这会导致类似的错误

Couldn't resolve dependent task 'devices' in workspace folder 'file:///home/simon/git-repos/workspace/app.code-workspace'
Couldn't resolve dependent task 'app' in workspace folder 'file:///home/simon/git-repos/workspace/app.code-workspace'

现在看起来它不是在 .code-workspace 文件之外搜索

我可以用一点技巧让它按照我想要的方式工作,但我必须将 app/tasks.json 文件更改目录中的所有任务指定为依赖项目并指定问题匹配器“相对路径”对于每个任务。例如:

    {
        "type": "shell","label": "devices","command": "cd ${workspaceFolder}/../devices && ./build.py","problemmatcher": {
            "base": "$gcc","fileLocation": ["relative","${workspaceRoot}/../devices"]
        },},

没关系,因为我现在可以做我想做的事情并创建构建依赖项,但任务定义不在正确的位置。它们都在 app/tasks.json 中,而不是在每个项目自己的 tasks.json 中。似乎逻辑在错误的地方。

我检查了 https://code.visualstudio.com/docs/editor/tasks-appendix 处的 tasks.json 架构,看看是否有您可以在 dependsOn 条目上设置的额外参数,甚至没有提到 dependsOn 或 { {1}}。

有没有办法在单个项目 dependsOrder 文件中配置任务并在另一个项目或顶级工作区配置中的任务的 tasks.json 中引用它们?

在哪里可以找到 tasks.json 文件的完整架构?或者是用来读入这个文件代码

西蒙。

解决方法

沿着您的 dependsOn 任务数组,只需添加一个值为 dependsOrder"sequence"

以下是官方文档的参考:VSCode - Compound tasks

如果你指定 "dependsOrder": "sequence" 那么你的任务依赖 按照它们在dependsOn 中列出的顺序执行。任何 使用“dependsOrder”在dependsOn中使用的后台/监视任务: “序列”必须有一个问题匹配器来跟踪它们何时出现 “完成”。

tasks.json 示例:

{
    "version": "2.0.0","options": {},"tasks": [
        {
            "label": "docker-compose-restart","type": "shell","command": "docker-compose down","dependsOrder": "sequence","dependsOn": [
                "docker-compose-build","docker-compose-start"
            ],},{
            "label": "docker-compose-build","command": "docker-compose build",{
            "label": "docker-compose-start","command": "docker-compose up",]
}