任務管線設定
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"] }
表示專案的特定「測試」目標必須在其自己的「建置」目標執行完成之後才能執行,但 "build": { "dependsOn": ["^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"
]
}
}
}
}