Turborepo logo

執行任務

Turborepo 透過自動平行處理和快取任務,最佳化您儲存庫中的開發者工作流程。一旦任務在 turbo.json註冊,您將擁有強大的新工具集,用於執行儲存庫中的腳本。

透過 turbo 執行任務非常強大,因為您可以在開發和 CI 管線中,使用單一模型在整個儲存庫中執行工作流程。

package.json 中使用 scripts

對於您經常執行的任務,您可以直接將 turbo 命令寫入根目錄的 package.json 中。

./package.json
{
  "scripts": {
    "dev": "turbo run dev",
    "build": "turbo run build",
    "test": "turbo run test",
    "lint": "turbo run lint"
  }
}

須知: 

turboturbo run 的別名 - 但我們建議在 package.json 和 CI 工作流程中使用 turbo run,以避免未來可能新增的 turbo 子命令發生潛在衝突。

這些腳本隨後可以使用您的套件管理器執行。

終端機
npm run dev

您只需要在根目錄的 package.json 中寫入 turbo 命令。將 turbo 命令寫入套件的 package.json 中可能會導致遞迴呼叫 turbo

使用全域 turbo

全域安裝 turbo 可讓您直接從終端機執行命令。這改善了您的本機開發體驗,因為它讓您更容易在需要的時間執行所需的內容。

此外,全域 turbo 在您的 CI 管線中非常有用,讓您可以最大限度地控制在管線的每個點要執行的確切任務。

自動套件範圍界定

當您位於套件的目錄中時,turbo 會自動將命令範圍界定為該套件的套件圖。這表示您可以快速撰寫命令,而無需為套件撰寫篩選器

終端機
cd apps/docs
turbo build

在上面的範例中,turbo build 命令將使用在 turbo.json 中註冊的 build 任務,為 docs 套件執行 build 任務。

須知: 

使用篩選器 將覆寫自動套件範圍界定。

自訂行為

run 子命令的文件中,您會找到許多有用的標誌,可以根據您的需求調整 turbo run 的行為。當執行全域 turbo 時,您可以使用以下工作流程更快地執行:

  • 最常用命令的變體:當 package.json 中的 build 腳本為 turbo build 時,它最有用 - 但您可能目前只對特定套件感興趣。您可以使用 turbo build --filter=@repo/ui 快速篩選出您感興趣的特定套件。
  • 一次性命令:像 turbo build --dry 這樣的命令不常需要,因此您可能不會在 package.json 中為其建立腳本。相反地,您可以在需要時直接在終端機中執行它。
  • 覆寫 turbo.json 設定:某些 CLI 標誌在 turbo.json 中有對應的等效項,您可以覆寫它。例如,您可能已將 turbo build 命令設定為在 turbo.json 中使用 "outputLogs": "full" - 但您目前只對查看錯誤感興趣。使用全域 turbo,您可以使用 turbo lint --output-logs=errors-only 來僅顯示錯誤。

執行多個任務

turbo 能夠執行多個任務,並在可能的情況下進行平行處理。

終端機
turbo run build test lint check-types

此命令將執行所有任務,並根據您的任務定義,自動偵測它可以盡早執行腳本的位置。

任務順序

turbo test lint 將以與 turbo lint test 完全相同的方式執行任務。

如果您想確保一個任務阻止另一個任務的執行,請在您的任務設定中表達該關係。

使用篩選器

雖然快取確保您永遠不會重複執行相同的工作而保持快速,但您也可以篩選任務,僅執行任務圖的子集。

--filter API 參考資料中有許多篩選的高階使用案例,但最常見的使用案例將在下面討論。

依套件篩選

依套件篩選是一種僅針對您目前正在處理的套件執行任務的簡單方法。

終端機
turbo build --filter=@acme/web

您也可以直接在 CLI 命令中篩選套件的特定任務,而無需使用 --filter

終端機
# Run the `build` task for the `web` package
turbo run web#build
 
# Run the `build` task for the `web` package, and the `lint` task for the `docs` package
turbo run web#build docs#lint

依目錄篩選

您的儲存庫可能具有目錄結構,其中相關套件被分組在一起。在這種情況下,您可以捕獲該目錄的 glob,以將 turbo 集中在這些套件上。

終端機
turbo lint --filter="./packages/utilities/*"

篩選以包含依賴項

當您處理特定套件時,您可能想要為該套件及其依賴項執行任務。當您對套件進行變更並想確保變更不會破壞其任何依賴項時,... 微語法很有用。

終端機
turbo build --filter=...ui

篩選以包含相依性

若要將範圍限制為套件及其相依性,請將 ... 附加到套件名稱。這會為指定的套件及其所依賴的所有套件執行任務。

終端機
turbo dev --filter=web...

依原始碼控制變更篩選

使用篩選器根據原始碼控制中的變更執行任務,是僅針對受變更影響的套件執行任務的好方法。原始碼控制篩選器必須以 [] 包裹

  • 與前一個提交比較turbo build --filter=[HEAD^1]
  • 與主分支比較turbo build --filter=[main...my-feature]
  • 使用 SHA 比較特定提交turbo build --filter=[a1b2c3d...e4f5g6h]
  • 使用分支名稱比較特定提交turbo build --filter=[your-feature...my-feature]

一般來說,您可以依靠快取來保持儲存庫快速。當您使用遠端快取時,您可以指望未變更的套件命中快取。

組合篩選器

為了更精確,您可以組合篩選器以進一步細化進入任務圖的入口點。

終端機
turbo build --filter=...ui --filter={./packages/*} --filter=[HEAD^1]

多個篩選器組合為聯集,表示任務圖將包含符合任何篩選器的任務。有關篩選器高階用法的更多資訊,請參閱 --filter API 參考資料

後續步驟

當您開始在儲存庫中執行任務時,您可能會開始注意到您的任務變得更快。接下來,您將探索快取,以及 turbo 如何讓您永遠不會重複執行相同的工作。