メインコンテンツへスキップ
非公式ベータ版翻訳

このページは 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ではtargetDefaultsの代わりにtargetDependenciesを使用していました。両方とも機能しますが、targetDefaultsの使用が推奨されます。

^記号(キャレット記号)は依存関係を意味します。したがって、"test": { "dependsOn": ["build"] }は特定のプロジェクトの「test」ターゲットが実行前に自身の「build」ターゲットの完了に依存することを示し、"build": { "dependsOn": ["^build"] }は特定のプロジェクトの「build」ターゲットが実行前にすべての依存プロジェクトの「build」ターゲットの完了に依存することを意味します。

lerna run test --scope=myprojを実行する場合、上記の設定はLernaに次のように指示します:

  1. myprojtestコマンドを実行

  2. test -> buildの依存関係が定義されているため、まずmyprojbuildを実行

  3. build自体が同じプロジェクトのprebuildと全依存関係のbuildに依存しているため、prebuildスクリプトを実行し、すべての依存関係のbuildスクリプトを実行

Lernaはすべてのビルドが完了するまでテストの実行を待つ必要はありません。タスクオーケストレーターは、制約が満たされている限り可能な限り多くのタスクを並列実行します。

次のような状況は非常に一般的です:

ターゲットの混合

nx.jsonで定義されたルールはリポジトリ内の全プロジェクトに適用されます。プロジェクト固有のルールはpackage.jsonに追加して定義することもできます。

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