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.json
的 outputs
鍵中定義的任務文件輸出。當發生緩存命中時,Turborepo 將從緩存中恢復文件。
如果你沒有為任務聲明文件輸出,Turborepo 將不會對其進行緩存。對於一些任務(如代碼檢查器)來說,這可能無所謂,但許多任務產生的文件你可能希望能被緩存。
如果你在命中緩存時遇到文件不可用的錯誤,請確保你已為任務定義了輸出。
日誌
Turborepo 總是捕捉你任務的終端輸出,並從首次執行任務時恢復這些日誌到你的終端。
你可以使用 --output-logs
標誌或 outputLogs
配置選項來配置重播日誌的詳細程度。
任務輸入
輸入被 Turborepo 哈希處理,為任務運行創建一個“指紋”。當“指紋”匹配時,執行任務將命中緩存。
在底層,Turborepo 創建兩個哈希:一個全局哈希和一個任務哈希。如果這些哈希的任何一個發生變化,任務將錯過緩存。
全局哈希輸入
turbo.json
和套件的 turbo.json
中更改輸出。package.json
中更新依賴將導致所有任務錯過緩存。.env
文件列在全局依賴中,更改 .env
會導致所有任務錯過緩存。GITHUB_TOKEN
列在 globalEnv 中時,改變其值。-cache-dir
,-framework-inference
,或 -env-mode
。turbo build -- --arg=value
與 turbo build
或 turbo build -- --arg=diff
比較將錯過緩存。套件哈希輸入
turbo.json
。package.json
中更新依賴。package.json
變更:更新一個套件的 package.json
中的名稱欄位。src/index.ts
中寫新代碼。