任务管道配置
Lerna 将运行 npm 脚本(分叉进程等)的工作委托给 Nx。nx.json 文件是您可以配置 Nx 如何执行此操作的地方。
如果您没有 nx.json,请运行 npx lerna add-caching。
并行运行任务
如果您想将运行脚本的进程数增加到 5(默认为 3),请传递以下参数:
npx lerna run build --concurrency=5
定义任务依赖(又称任务管道)
如果没有我们的帮助,Lerna 无法知道哪些目标(脚本)有先决条件,哪些没有。您可以在 nx.json 文件中定义任务依赖:
{
  ...
  "targetDefaults": {
    "build": {
      "dependsOn": ["^build"]
    }
  }
}
通过这个配置,Lerna 知道在构建一个项目之前,需要先构建其所有依赖。但是对于测试没有任何约束。
一旦定义了
targetDefaults属性,排序标志将被忽略。
这种机制非常灵活。让我们看看这个例子:
{
  ...
  "targetDefaults": {
    "build": {
      "dependsOn": ["^build", "prebuild"]
    },
    "test": {
      "dependsOn": ["build"]
    }
  }
}
注意,Nx 的旧版本使用 targetDependencies 而不是 targetDefaults。两者仍然有效,但推荐使用 targetDefaults。
^ 符号(又称插入符号)简单地表示依赖。因此,"test": { "dependsOn": ["build"] } 意味着特定项目的 "test" 目标依赖于其自身的 "build" 目标已完成,而 "build": { "dependsOn": ["^build"] } 意味着特定项目的 "build" 目标依赖于该项目所有依赖的 "build" 目标已完成。
当运行 lerna run test --scope=myproj 时,上述配置会告诉 Lerna:
- 为 myproj运行test命令
- 但由于定义了 test -> build的依赖,Lerna 会先运行myproj的build。
- build本身定义了对- prebuild(在同一个项目上)以及所有依赖的- build的依赖。因此,它将运行- prebuild脚本,并为所有依赖运行- build脚本。
请注意,Lerna 不必在开始运行测试之前运行所有构建。任务编排器将尽可能并行运行尽可能多的任务,只要满足约束条件。
这种情况很常见:
因为我们在 nx.json 中描述了规则,所以它们将应用于仓库中的所有项目。您还可以通过在项目的 package.json 中添加规则来定义特定于项目的规则。
{
  ...
  "nx": {
    "targets": {
      "test": {
        "dependsOn": [
          "build"
        ]
      }
    }
  }
}