Turborepo 2.0
Turborepo 2.0 提升了 JavaScript 和 TypeScript 專案的開發者體驗,包含以下功能:
- 全新終端介面:互動式任務和更清晰的日誌
- 監看模式:適用於您專案中任何工具、具有依賴感知能力的任務監看器
- 全新文件:核心 Monorepo 概念、更新的 API 參考和生態系統工具指南
- 授權和維護更新:升級至 MIT 授權,並新增了長期支援政策
立即執行 npx @turbo/codemod migrate
以進行更新,或使用 npx create-turbo@latest
開始使用。
全新終端介面
在Turborepo 1.13 中,我們發布了一個實驗性介面,以了解精進的終端介面如何提升開發速度。 透過RFC 流程,我們得以與社群合作,根據您的回饋設計出改良的本地體驗。 感謝所有參與者。
今天,我們將發布這個全新的穩定版 UI,以及其所實現的眾多高需求功能。
日誌清晰度提升
在 2.0 之前,當您在處理程式庫和應用程式時,turbo
會以串流形式輸出日誌。 這有時可能會讓人感到資訊過載,因為混合在一起的日誌難以理解特定任務的執行狀況。
在這個版本的 UI 中,您可以使用方向鍵選擇個別任務,一次檢查一個任務的日誌,讓您更容易閱讀想要關注的日誌。
小提示:
先前版本 turbo
的串流日誌檢視模式仍然可用於本地開發,只需使用 --log-order
標記即可。 請注意,在此選項下,任務將不具互動性,且某些工具可能會意外清除終端機。
互動式任務
許多工具允許與腳本互動以實現重要功能。 然而,在先前版本的 Turborepo 中,您的腳本被限制在 turbo
內部,因此您無法與它們互動。
現在,您可以進入個別任務的 shell,並透過直接在介面中輸入,經由 stdin
將輸入傳遞至您的腳本。 這實現了諸如使用 Jest 或 Vitest 執行特定測試套件、使用 Drizzle 或 Prisma 處理資料庫遷移等工作流程。
若要將任務標記為互動式,請在其定義中新增 "persistent": true
在 UI 中選取任務後,使用 Enter
鍵進入任務的 shell,並使用 CTRL+Z
退出。
若要深入了解持久性和互動式任務,請造訪文件。
監看模式
Turborepo 一次執行多個任務的能力為您提供了更緊密的意見回饋迴圈,有助於您更快地交付產品。 為了在本地工作時充分利用 Turborepo 的平行化功能,您的工具需要具備「監看器」功能,以便在您進行變更時重新執行程式碼。 遺憾的是,許多常見工具不具備此功能,而且大多數工具不具備 monorepo 感知能力,這導致了依賴於專案中其他腳本的腳本出現問題。
今天,我們發布監看模式,將此功能帶給您的所有工具
使用 turbo watch
,Turborepo 會在您變更原始碼時重新執行任務。 任務將使用您的依賴關係圖和 turbo.json
中的設定執行,就像 turbo run
一樣。
全新文件
在此版本中,我們也發布了經過改進的文件,這些文件建立在先前版本的優勢之上。 我們已聽取您的回饋,因此文件現在包含
- 更多 monorepo 基礎知識和操作指南
- 關於將您喜愛的工具與 Turborepo 整合的指南
- 更清晰的資訊架構和改進的搜尋功能
重大變更
請參閱升級指南以取得如何更新至 2.0 的說明。
設定
turbo.json
的重大變更可以使用 npx @turbo/codemod migrate
進行更新。
- 忽略
package.json
中的turbo
欄位 (PR) - Turborepo 的預設磁碟快取位置已從
node_modules/.cache
移至.turbo/cache
(PR) turbo.json
中的pipeline
鍵已重新命名為tasks
(PR)inputs
/outputs
中目錄的檔案 glob 包含目錄的內容 (例如,dist
和dist/
等同於dist/**
) (PR)outputMode
鍵已重新命名為outputLogs
,以提高清晰度並與--output-logs
標記匹配 (PR)- 此變更將反映在
resolvedTaskConfig
中的執行摘要中
- 此變更將反映在
dependsOn
和globalDependencies
中的環境變數語法錯誤 (自 1.4 版起已棄用) (PR)- 移除
globalDotEnv
和dotEnv
,改為在inputs
中包含.env
檔案 (PR) - 移除
--ignore
,改為使用--filter
以及下方的圖表正確性變更 (PR)
正確性
- 環境變數的嚴格模式現在是預設模式,取代寬鬆模式 (PR)
- 工作區根目錄現在是所有套件的隱含依賴項 (PR)
- 移除
--scope
標記 (自 1.2 版起已棄用) (PR) - 套件的
package.json
中必須具有name
(PR) - 根目錄
package.json
中的packageManager
欄位現在為必填 (PR) - 根目錄
package.json
中的engines
欄位現在用於雜湊運算 (PR) --filter
不再為套件名稱推斷命名空間 (PR)- 當沒有套件名稱或目錄匹配時,
--filter
現在會產生錯誤 (PR) --only
限制任務依賴項,而不僅僅是套件依賴項 (PR)
其他
社群
我們很高興看到 Turborepo 持續成長和被採用
- 超過 2.52 萬個 GitHub 星星
- 每週超過 230 萬次 NPM 下載
- 使用 Vercel 遠端快取 節省了 347 年的運算時間
Turborepo 是所有貢獻者共同努力的成果,包括我們的核心團隊:Anthony、Chris、Greg、Mehul、Mitch、Nicholas 和 Tom。
感謝您持續的支持、回饋和協作,讓 Turborepo 成為您首選的建置工具。 如果您尚未加入,請在 GitHub 和 Discord 上加入討論。