タスク結果のキャッシュ
タスクの実行、キャッシングなどに関しては、LernaとNxは互換性があります。「Lernaはビルドをキャッシュできる」というのは、LernaがビルドをキャッシュできるNxを使用しているという意味です。
同じコードを何度もビルドしてテストし直すのはコストがかかります。Lernaは計算キャッシュを使用して、同じコードを二度とビルドしません。
設定
Nxを介したLernaは、最も洗練され、実戦でテスト済みの計算キャッシュシステムを備えています。実行しようとしているタスクが以前に実行されたかどうかを認識し、キャッシュを使用してそのタスクの実行結果を復元できます。
nx.json
がない場合は、npx lerna add-caching
を実行してください。
build
とtest
のキャッシングを有効にするには、nx.json
のtargetDefaults
プロパティを編集して、build
とtest
タスクを含めます。
{
"targetDefaults": {
"build": {
"cache": true
},
"test": {
"cache": true
}
}
}
キャッシュ可能な操作は副作用がない必要があります。つまり、同じ入力に対しては常に同じ出力が得られる必要があります。例として、バックエンドAPIにアクセスするe2eテスト実行は、バックエンドがテスト実行の結果に影響を与える可能性があるため、キャッシュできません。
次に、次のコマンドを2回実行します。2回目は瞬時に実行されます。
lerna run build --scope=header
> lerna run build --scope=header
> header:build [existing outputs match the cache, left as is]
> header@0.0.0 build
> rimraf dist && rollup --config
src/index.tsx → dist...
created dist in 858ms
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Lerna (powered by Nx) Successfully ran target test for project header (4ms)
Nx read the output from the cache instead of running the command for 1 out of 1 tasks.
キャッシュからの再生
Lernaは、タスクの入力が変更されていないと判断した場合、実際にマシン上で実行した場合と同じようにタスクの出力を再作成します。ただし、はるかに高速です。キャッシュされたタスクの出力には、ターミナル出力と、そのタスクに対して定義されたoutput
ディレクトリに作成されたファイルの両方が含まれます。
header:build
タスクが出力するdist
フォルダを削除してから、lerna run build --scope=header
を再度実行することで、これをテストできます。キャッシュされたタスクは瞬時に再生され、正しいファイルがdist
フォルダに存在します。
header/
└── dist/ <-- this folder gets recreated
タスクが別の場所に出力アーティファクトを作成する場合は、キャッシュされる出力フォルダを変更できます。また、変更された場合にキャッシュを無効にする入力をカスタマイズすることもできます。
高度なキャッシング
キャッシングの実装の詳細な理解と、リポジトリのキャッシングの微調整については、キャッシングの仕組みを参照してください。
ローカル計算キャッシュ
デフォルトでは、Lerna(Nx経由)はローカル計算キャッシュを使用します。Nxはキャッシュされた値を1週間だけ保存し、その後削除されます。キャッシュをクリアするにはnx reset
を実行します。Nxは次回アクセスしようとしたときに新しいキャッシュを作成します。