本页面由 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 文件中定义任务依赖关系:
{
...
"targetDefaults": {
"build": {
"dependsOn": ["^build"]
}
}
}
通过此配置,Lerna 知道在构建项目前需要先构建其所有依赖项。但请注意,测试任务不会受到此类约束。
一旦定义了
targetDefaults属性,sort 标志将被忽略。
这套机制非常灵活,参考以下示例:
{
...
"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"
]
}
}
}
}