檔案輸入
預設情況下,當儲存庫中的任何檔案變更時,會視為工作區已更新。但是,並非儲存庫中每個檔案變更都應該導致重新執行任務。Turborepo 提供工具,確保你可以定義每個重要的檔案。
全域檔案
幾乎每個儲存庫都有一些設定出現在儲存庫的根目錄。這些檔案有潛力影響子工作區的行為。
package.json
和 turbo.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.json
和 turbo.json
的預設行為。
在這個範例中,當根目錄 tsconfig.json
檔案變更時,turborepo 中的每個單一任務都會重新執行。
工作區檔案
除了任何工作區以外的共用檔案之外,您也可以指定每個工作區要包含哪些檔案。
package.json
和 turbo.json
每個工作區的 package.json
和 turbo.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
任務可能只依賴 src
和 test
目錄中的檔案。您可以使用傳遞給 pipeline.<task>.inputs
的 glob 模式來指定這一點。
{
"$schema": "https://turbo.dev.org.tw/schema.json",
"pipeline": {
"build": {
"inputs": ["src/**"]
},
"test": {
"inputs": ["src/**", "test/**"]
}
}
}
這些 glob 模式相對於工作區路徑,因此,對於 build
在 website
應用程式中,它會將 /apps/website/src/**
視為檔案輸入,而對於 build
在 utils
工作區中,它會將 /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"]
}
}
}