快取任務結果
在執行任務、快取等等方面,Lerna 和 Nx 可以交換使用。當我們說「Lerna 可以快取建置」時,我們的意思是 Lerna 使用了能快取建置的 Nx。
反覆建置並重新測試相同的程式碼成本很高。Lerna 使用運算快取,因此相同的程式碼永遠不會建置兩次。
設定
Lerna 透過 Nx 建立了最精良且經過驗證的運算快取系統。它知道您將要執行的任務在過去執行過,因此它可以使用快取,以還原執行該任務的結果。
如果您沒有 nx.json
,請執行 npx lerna add-caching
。
如要為 build
和 test
啟用快取,請編輯 nx.json
中的 targetDefaults
屬性,以包含 build
和 test
任務
{
"targetDefaults": {
"build": {
"cache": true
},
"test": {
"cache": true
}
}
}
請注意,要快取的操作需要沒有副作用,表示在提供相同的輸入時,永遠會產生相同的輸出。例如,如果 e2e 測試執行時會觸及後端 API,則無法進行快取,因為後端可能會影響測試執行的結果。
現在,執行下列指令兩次。第二次執行時,操作會立即完成
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 會將快取值儲存一週,然後刪除。若要清除快取,請執行 nx reset
,Nx 會在下次嘗試存取快取時建立新的快取。