Turborepo

執行任務

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 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 如何讓您永遠不會重複執行相同的工作。

小時

節省的總計算時間
開始使用
遠端快取 →

本頁內容