iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

Turborepo 透過緩存機制加快構建速度,確保不會重複進行相同的工作。當你的任務是可緩存的,Turborepo 會利用第一次運行任務時生成的指紋,從緩存中恢復任務的結果。

例如,在3個套件中運行了12個任務,結果是“>>> FULL TURBO”全緩存命中。從緩存中恢復這些任務只需80毫秒。

在本地工作時,Turborepo的緩存結果可以顯著節省時間,啟用遠程緩存後,這一功能在團隊和CI中的效果更為強大。

值得注意的是,Turborepo假設你的任務是確定的。如果一個任務在給定的輸入集合下能夠產生不同的輸出,緩存可能無法按預期工作。

遠程緩存

Turborepo 將任務結果存儲在你機器上的 .turbo/cache 目錄中。然而,通過與你的團隊成員和CI共享這個緩存,你可以讓整個組織運行得更快。

要了解更多關於遠程緩存及其好處的信息,請訪問遠程緩存頁面。

啟用遠程緩存

首先,使用你的遠程緩存提供者進行身份驗證:

npx turbo login

然後,將你的機器上的倉庫與遠程緩存關聯:

npx turbo link

現在,當你運行任務時,Turborepo 將自動將任務的輸出發送到遠程緩存。如果你在另一台也經過身份驗證的遠程緩存的機器上運行相同的任務,它將在首次運行任務時命中緩存。

要了解如何將你的 CI 機器連接到遠程緩存,請訪問構建 CI 指南。

預設情況下,Turborepo 使用 Vercel 遠程緩存,無需任何配置。如果你想使用不同的遠程緩存,請訪問遠程緩存 API 文檔。

什麼會被緩存?

任務輸出

Turborepo 會緩存在 turbo.jsonoutputs 鍵中定義的任務文件輸出。當發生緩存命中時,Turborepo 將從緩存中恢復文件。

提供文件輸出

如果你沒有為任務聲明文件輸出,Turborepo 將不會對其進行緩存。對於一些任務(如代碼檢查器)來說,這可能無所謂,但許多任務產生的文件你可能希望能被緩存。

如果你在命中緩存時遇到文件不可用的錯誤,請確保你已為任務定義了輸出。

日誌

Turborepo 總是捕捉你任務的終端輸出,並從首次執行任務時恢復這些日誌到你的終端。

你可以使用 --output-logs 標誌或 outputLogs 配置選項來配置重播日誌的詳細程度。

任務輸入

輸入被 Turborepo 哈希處理,為任務運行創建一個“指紋”。當“指紋”匹配時,執行任務將命中緩存。

在底層,Turborepo 創建兩個哈希:一個全局哈希和一個任務哈希。如果這些哈希的任何一個發生變化,任務將錯過緩存。

全局哈希輸入

  • 解析的任務定義:從根目錄的 turbo.json 和套件的 turbo.json 中更改輸出。
  • 影響工作空間根目錄的鎖文件變更:在根目錄的 package.json 中更新依賴將導致所有任務錯過緩存。
  • 全局依賴文件內容:當 .env 文件列在全局依賴中,更改 .env 會導致所有任務錯過緩存。
  • 列在 globalEnv 中的變量值:當 GITHUB_TOKEN 列在 globalEnv 中時,改變其值。
  • 影響任務運行的標誌值:如使用改變行為的標誌 -cache-dir-framework-inference,或 -env-mode
  • 任意透傳參數:如 turbo build -- --arg=valueturbo buildturbo build -- --arg=diff 比較將錯過緩存。

套件哈希輸入

  • 套件配置變更:更改一個套件的 turbo.json
  • 影響套件的鎖文件變更:在一個套件的 package.json 中更新依賴。
  • 套件的 package.json 變更:更新一個套件的 package.json 中的名稱欄位。
  • 源控中的文件變更:在 src/index.ts 中寫新代碼。

上一篇
turboRepo專案架構
下一篇
Turborepo cache 機制2
系列文
讓我們一起與turboRepo共舞30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言