turbo.json
Turborepo 將始終按照您的配置和Package Graph中描述的順序運行任務,盡可能並行化工作,以確保一切盡可能快地運行。這比一次運行一個任務要快,這也是 Turborepo 如此快的原因之一。
物件中的每個鍵tasks
都是一個可以由 執行的任務turbo run
。 Turborepo 將在package.json
您的套件中搜尋與任務同名的腳本。
若要定義任務,請使用中turbo.json
。例如,沒有依賴項且沒有指定輸出的基本任務build
可能如下所示:
turbo run build
如果此時運行,Turborepo 將並行運行build
套件中的所有腳本,並且不會快取任何檔案輸出。這很快就會導致錯誤。
// ./turbo.json
{ "tasks": { "build": {} // Incorrect! }}
此dependsOn
鍵用於指定在不同任務開始運行之前必須完成的任務。例如,在大多數情況下,您希望build
庫的腳本在應用程式的腳本運行之前完成build
。為此,您可以使用以下命令turbo.json
:
微^
語法告訴 Turborepo 從依賴圖的底部開始執行任務。如果您的應用程式依賴名為 的庫ui
,並且該庫有一個build
任務,build
則 中的腳本將首先ui
執行。成功完成後,應用程式中的任務將運行。build
這是一個重要的模式,因為它確保應用程式的build
任務將具有編譯所需的所有必要依賴項。當您的依賴關係圖成長為具有多個層級的任務依賴關係的更複雜的結構時,此概念也適用。
有時,您可能需要確保同一包中的兩個任務按特定順序運行。例如,您可能需要先執行build
庫中的任務,然後再執行test
同一庫中的任務。為此,請將dependsOn
金鑰中的腳本指定為純字串(不含^
)。
// ./turbo.json
{ "tasks": { "test": { "dependsOn": ["build"] } }}
當您需要確保同一個套件(package)中的兩個任務按特定順序運行時,您可以通過 dependsOn
鍵來指定依賴關係。這裡將通過一些例子來說明如何配置這些依賴關係,讓任務間的執行更加有序。
假如您有一個庫,在這個庫中,您需要先執行建置(build)任務,然後再運行測試(test)任務。您可以在 turbo.json
配置文件中像這樣指定:
{
"tasks": {
"test": {
"dependsOn": ["build"]
}
}
}
在這個配置中,test
任務將依賴於 build
任務的完成。
您也可以指定某個具體套件中的任務作為依賴。例如,如果您希望在進行任何檢查代碼格式(lint)任務之前必須先完成 utils
套件中的建置(build)任務,可以這樣配置:
{
"tasks": {
"lint": {
"dependsOn": ["utils#build"]
}
}
}
這樣設置後,任何 lint
任務都必須等待 utils
套件中的 build
任務完成才能開始。
您可以更具體地指定依賴任務,限制它僅屬於某個特定套件。例如,如果只有 web
套件的 lint
任務需要依賴 utils
套件的建置(build)任務:
{
"tasks": {
"web#lint": {
"dependsOn": ["utils#build"]
}
}
}
根據這項配置,web
套件的 lint
任務將只能在 utils
套件的 build
任務完成後開始執行。
有些任務可能不需要任何依賴,比如一個用於檢查 Markdown 文件中拼寫錯誤的任務,可能不需要關心其他任務的狀態。在這種情況下,您可以省略 dependsOn
鍵或提供一個空數組:
{
"tasks": {
"spell-check": {
"dependsOn": []
}
}
}
這樣配置後,spell-check
任務就可以獨立運行,不依賴於其他任務的完成狀態。
這些配置方法可以幫助您更有效地管理和調度多個任務,確保它們按正確的順序執行,從而提高工作效率。
在使用 Turborepo 管理專案時,對任務的輸出和輸入進行精確設定是非常重要的。這些設定有助於確保任務高效執行,並且有效利用缓存機制。下面我們將介紹如何配置這些參數。