任务管道配置
Lerna 将 npm 脚本的运行(例如 fork 进程)委托给 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"
]
}
}
}
}