儲存庫
文件
核心概念
快取什麼

快取什麼?

預設情況下,Turborepo 總是會擷取所有任務的控制台輸出。如果你的任務沒有發出任何檔案(例如使用 Jest 的單元測試),你可以省略 outputs。除此之外,你通常需要指定需要擷取(和還原!)哪些磁碟檔案,才能執行後續依賴任務。

設定快取輸出

你可以在 Turborepo 中設定快取輸出,方法是在 pipeline.<task>.outputs 內指定一組 glob,如下例所示

{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "pipeline": {
    "build": {
      "outputs": ["dist/**"]
    }
  }
}

包含

在上述 build 任務定義中,請注意它適用於整個 Turborepo 中所有build 任務。每個個別任務的輸出位置很可能略有不同,特別是隨著儲存庫的成長。

例如,你可能有一個工具工作區,其在建置期間產生的成品出現在 lib 中,而不是 dist,這表示你之前的定義無法同時適用於工具和應用程式,其輸出成品出現在 dist 中。

有兩種方法可以解決這個問題。第一個選項是將 lib 目錄包含在輸出中

{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "pipeline": {
    "build": {
      "outputs": ["dist/**", "lib/**"]
    }
  }
}

只要 distlib 資料夾對 turborepo 中的所有工作區都從空開始,這個模式就會很好用。turbo 會擷取出現在這些資料夾中的所有檔案。

不過,如果模式在所有工作區中不夠一致,你可以為每個工作區定義,或使用工作區設定

{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "pipeline": {
    "app#build": {
      "outputs": ["dist/**"]
    },
    "util#build": {
      "outputs": ["lib/**"]
    }
  }
}

你會注意到你必須使用/**運算子來指定目錄中的所有檔案。只指定目錄名稱(例如lib)只會包含目錄本身,而不包含其內容。

排除

有時候,指定哪些檔案需要快取的最簡單方法是指定要包含的檔案組合,以及已包含的檔案集中哪些檔案應該排除。

例如,使用預設設定的 Next.js 應用程式最簡單的設定如下所示

{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "pipeline": {
    "app#build": {
      "outputs": [".next/**", "!.next/cache/**"],
    }
  }
}

若要排除檔案,你可以指定一個以!開頭的 glob 模式,以排除任何符合的內容。