Turborepo 2.4

2025 年 1 月 31 日,星期五
Nicholas Yang
姓名
Nicholas Yang
X
@nicholaslyang
Anthony Shew
姓名
Anthony Shew
X
@anthonysheww
Chris Olszewski
姓名
Chris Olszewski

Turborepo 2.4 包含多項改進,以增強您的儲存庫

立即執行 npx @turbo/codemod migrate 升級,或使用 npx create-turbo@latest 開始使用。

Boundaries 實驗性功能

Turborepo 建構於套件管理器 Workspaces 之上,並依賴生態系統慣例來判斷您的儲存庫的任務快取。然而,這要求儲存庫中的所有開發人員都了解並遵守這些慣例。

我們正在推出 Boundaries,這是一項實驗性功能,旨在捕捉儲存庫中未遵循這些最佳實務的地方。這使快取更安全,並確保您的儲存庫已準備好安全地使用未來的 Turborepo 功能。

立即使用以下指令嘗試:

終端
turbo boundaries

此 Boundaries 的早期迭代版本包含尋找兩種 monorepo 錯誤類型

Boundaries RFC

我們期待聽到您對 Boundaries RFC 的回饋,其中包括針對這些內建診斷以及自訂建構 Boundaries 的提案。

若要了解更多資訊,請造訪文件

終端 UI 改善

我們持續迭代終端 UI,最初在 Turborepo 2.0 中發布。

持久偏好設定

在 Turborepo 的先前版本中,您每次執行 turbo 時都需要將終端 UI 重設為您想要的狀態。在 Turborepo 2.4 中,我們將持久保存您所做的一些 UI 選擇,包括

總之,持久保存這些偏好設定在 turbo 呼叫之間創造了更流暢的體驗,將 UI 還原到先前執行 turbo 的狀態。

新的快捷鍵

我們在終端 UI 中新增了更多功能,使其更易於使用您的任務和日誌。

造訪文件以了解更多資訊。

Watch Mode 快取 實驗性功能

Watch Mode 是一個 monorepo 感知的監視器,可根據您的任務圖重新執行任務。這開啟了在 monorepo 中工作的全新方式,利用單一、全域、感知依賴項的監視器,而不是許多較小、功能較弱的監視器腳本。

在此版本中,我們在 Watch Mode 中新增了快取作為實驗性功能。若要啟用它,請使用 --experimental-write-cache 標誌

終端
turbo run dev --experimental-write-cache

若要了解更多關於 Watch Mode 的資訊,請造訪文件

循環依賴建議

循環依賴是您的套件圖中的迴圈,會在 Turborepo 的任務圖中建立非決定性的循環。但是,如果您的任務圖中存在迴圈,Turborepo 無法判斷哪個任務先執行,因為它們都互相依賴。

在您的 monorepo 中採用 Turborepo 時,您可能會發現循環依賴,因為 Turborepo 建立的任務圖比您先前的任務執行器更複雜、更快速。先前,Turborepo 會天真地列出儲存庫的套件圖中存在的循環或迴圈中涉及的所有套件。現在,Turborepo 將包含需要分解的依賴關係,以擺脫圖中的循環。

比較以下終端輸出的前後差異

終端
  × Invalid package dependency graph:
  ╰─▶ Cyclic dependency detected:
  │     @repo/logger, blog, storefront, @repo/ui
  │     The cycle can be broken by removing any of these sets of dependencies:
  │     { @repo/ui -> @repo/logger, @repo/ui -> storefront }
  │     { @repo/logger -> @repo/ui, @repo/ui -> storefront }

  ╰─▶   api, admin
        The cycle can be broken by removing any of these sets of dependencies:
        { admin -> api }
        { api -> admin }

schema.jsonnode_modules

schema.json 檔案為 JSON 檔案在您的編輯器中提供自動完成和驗證。我們有一個可從網頁存取的 turbo.jsonschema.json 版本,託管在 https://turbo.dev.org.tw/schema.json,但有些開發人員偏好從 node_modules 取得檔案,以與已安裝的 turbo 版本保持同步。

從此版本開始,一旦您執行套件管理器的安裝命令,schema.json 即可在 node_modules 中使用

turbo.json
{
  "$schema": "./node_modules/turbo/schema.json"
}

node_modules 位置

我們建議將 turbo 安裝在您儲存庫的根目錄,因此 schema 的路徑應指向您儲存庫根目錄的 node_modules。在套件組態中,您可能需要使用類似 ../../node_modules/turbo/schema.json 的路徑。

造訪文件以取得更多資訊。

ESLint Flat Config 支援

Turborepo 2.4 在 eslint-config-turboeslint-plugin-turbo 中引入了對 ESLint v9 的支援,繼 ESLint v8 在 2024 年 10 月 5 日終止生命週期之後。

./packages/eslint-config/index.js
import turboConfig from 'eslint-config-turbo/flat';
 
export default [
  ...turboConfig,
  // Other configuration
];

組態和外掛程式保持向後相容性,適用於仍在使用 ESLint v8 的使用者,以確保順利過渡。

如需更多資訊,請造訪文件

其他變更

致謝與社群

Turborepo 是所有貢獻者(包括我們的核心團隊:AnthonyChrisDimitriNicholasTom)共同努力的成果。

感謝您持續的支持、回饋和協作,使 Turborepo 成為您首選的建置工具。若要了解如何參與,請造訪社群頁面

我們也感謝所有為此 Turborepo 版本做出貢獻的人員:@aaronccasanova、@AlvaroParker、@ankur-arch、@arosequist、@atimmer、@bgw、@bitttttten、@chaficnajjar、@codexshell、@eps1lon、@gianelli99、@glitched-w0rld、@JasonnnW3000、@jbrocksfellas、@jeremy-code、@jonathandsouza、@Juneezee、@kayumuzzaman、@krlvi、@maciej-ka、@ognevny、@olets、@pkerschbaum、@romanofski、@shivam-pawar、@takaebato、@tevem1207、@thebrubaker、@Tofandel、@trivikr、@yamz8 和 @zsh77。