跳至主要内容
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

任务流水线配置

Lerna 将 npm 脚本的运行(包括进程分叉等操作)委托给 Nx 执行。你可以在 nx.json 文件中配置 Nx 如何执行这些任务。

提示

如果尚未创建 nx.json 文件,请运行 npx lerna add-caching

并行运行任务

若需增加脚本运行的并行进程数(例如从默认值 3 提升至 5),请传递以下参数:

npx lerna run build --concurrency=5

定义任务依赖关系(即任务流水线)

在没有额外配置的情况下,Lerna 无法识别哪些目标(脚本)存在前置依赖。你可以在 nx.json 文件中定义任务依赖关系:

nx.json
{
...
"targetDefaults": {
"build": {
"dependsOn": ["^build"]
}
}
}

通过此配置,Lerna 知道在构建项目前需要先构建其所有依赖项。但请注意,测试任务不会受到此类约束。

一旦定义了 targetDefaults 属性,sort 标志将被忽略。

这套机制非常灵活,参考以下示例:

nx.json
{
...
"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:

  1. myproj 运行 test 命令

  2. 由于存在 test -> build 的依赖关系,Lerna 会优先执行 myprojbuild

  3. build 本身又定义了与 prebuild(同项目)及所有依赖项的 build 的依赖关系。因此它将运行 prebuild 脚本,并执行所有依赖项的 build 脚本。

注意:Lerna 无需等待所有构建完成后再开始测试。任务调度器会在满足约束条件的前提下,尽可能并行执行任务。

以下场景非常常见:

混合目标

由于我们在 nx.json 中定义的规则将应用于仓库所有项目,你也可以在项目的 package.json 中添加项目专属规则。

{
...
"nx": {
"targets": {
"test": {
"dependsOn": [
"build"
]
}
}
}
}