儲存庫
文件
核心概念
檔案輸入

檔案輸入

預設情況下,當儲存庫中的任何檔案變更時,會視為工作區已更新。但是,並非儲存庫中每個檔案變更都應該導致重新執行任務。Turborepo 提供工具,確保你可以定義每個重要的檔案。

全域檔案

幾乎每個儲存庫都有一些設定出現在儲存庫的根目錄。這些檔案有潛力影響子工作區的行為。

package.jsonturbo.json

預設情況下,Turborepo 會將根目錄 package.json 和根目錄 turbo.json 檔案納入全域雜湊。你不需要另外指定它們。

指定其他輸入

如果還有其他檔案應該考慮套用至每個工作區,例如根目錄 tsconfig.json,你應該在 globalDependencies 中指定。

{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "globalDependencies": ["tsconfig.json"],
  "pipeline": {
    "type-check": {}
  }
}

此自訂設定會新增至 Turborepo 對 package.jsonturbo.json 的預設行為。

在這個範例中,當根目錄 tsconfig.json 檔案變更時,turborepo 中的每個單一任務都會重新執行。

工作區檔案

除了任何工作區以外的共用檔案之外,您也可以指定每個工作區要包含哪些檔案。

package.jsonturbo.json

每個工作區的 package.jsonturbo.json(如果存在)的內容會自動考慮在工作區雜湊中。此行為無法設定。

Turborepo 的預設行為

Turborepo 的預設行為是檢查儲存庫並找出哪些檔案應包含在雜湊計算中。Turborepo 通常使用 Git 來找出哪些檔案應考慮

  • 出現在 Git 索引中且為工作區目錄子項目的所有檔案。
  • 為工作區目錄子項目且未 .gitignore 的所有未追蹤檔案。

如果 Git 不可用,或尚未設定儲存庫,我們會嘗試使用下列策略近似出會出現在 Git 索引中的內容

  • 包含為工作區目錄子項目的所有檔案。
  • 排除出現在根目錄 .gitignore 和工作區目錄的 .gitignore 的所有檔案。

這兩種方法並非總是會產生相同的結果!不會產生相同結果的場景

  • 目錄階層中其他位置的 .gitignore 檔案。
  • 已新增至 Git 索引且也在 .gitignore 內指定的檔案。

您應該同時提供 Git 和儲存庫的 Git 索引,以獲得最大的正確性。

自訂行為

自訂 inputs 會立即退出預設行為。您必須透過 pipeline.<task>.inputs 手動指定應考量的所有檔案。

為了方便,您可以在輸入陣列中使用特殊字串 $TURBO_DEFAULT$ 自動包含預設行為中考量的所有檔案。這讓您可以在自訂輸入時,無需手動指定預設考量的所有檔案。

對於某些任務,值得減少任務雜湊考量中的檔案輸入數量。很少有任務會依賴 README.md 的內容。只指定重要的檔案可以增加快取命中頻率。

例如,在許多 build 任務中,唯一重要的檔案可能會出現在 src 目錄中。或者,test 任務可能只依賴 srctest 目錄中的檔案。您可以使用傳遞給 pipeline.<task>.inputs 的 glob 模式來指定這一點。

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

這些 glob 模式相對於工作區路徑,因此,對於 buildwebsite 應用程式中,它會將 /apps/website/src/** 視為檔案輸入,而對於 buildutils 工作區中,它會將 /packages/utils/src/** 視為檔案輸入。

如果一個任務依賴於另一個指定檔案相依性的任務,則不需要再次列出。任務之間的相依性關係可用於確保滿足所有檔案相依性

{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "inputs": ["src/**"]
    },
    "test": {
      // This task dependsOn build...
      "dependsOn": ["build"],
      // ...which means that it does not need to specify "src/**" here:
      "inputs": ["test/**"]
    }
  }
}

可以使用此模式來避免需要為每個任務重複列舉檔案 glob 清單。

您可能也希望保留預設行為,但僅包含或排除幾個檔案。您可以使用特殊字串 $TURBO_DEFAULT$ 來包含預設會考慮的所有檔案

{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "pipeline": {
    "build": {
      "inputs": ["$TURBO_DEFAULT$", "!README.md", "a-git-ignored-file.txt"]
    }
  }
}