Turborepo 2.0
Turborepo 2.0 改善了 JavaScript 和 TypeScript 程式碼倉庫的開發者體驗,其功能包括
- 新的終端 UI:互動式任務和更清晰的日誌
- 監看模式:針對程式碼倉庫中任何工具的感知依賴性任務監看器
- 全新的文件:核心單程式碼倉庫概念、更新的 API 參考和生態系統工具指南
- 授權和維護更新:升級到 MIT 授權並新增長期支援政策
立即執行 npx @turbo/codemod migrate
來更新,或使用 npx create-turbo@latest
開始使用。
新的終端 UI
在Turborepo 1.13中,我們發布了一個實驗性介面,以了解精簡的終端 UI 如何提高開發速度。透過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 的平行處理能力,您的工具需要具有可用的「監看器」功能,以便在您進行變更時重新執行程式碼。遺憾的是,許多常見工具沒有此功能,而且大多數工具都不具備單程式碼倉庫感知能力,導致依賴程式碼倉庫中其他指令碼的指令碼出現問題。
今天,我們將發布監看模式,將此功能引入您的所有工具中
使用 turbo watch
時,只要您變更原始碼,Turborepo 就會重新執行任務。任務將使用您的依賴圖表和來自 turbo.json
的組態來執行,就像 turbo run
一樣。
全新的文件
在此版本中,我們也發布了重新設計的文件,以先前版本的優點為基礎。我們已聽取您的意見反應,因此文件現在包含
- 更多單程式碼倉庫基礎知識和操作說明
- 有關將您喜愛的工具與 Turborepo 整合的指南
- 更清晰的資訊架構和改進的搜尋
重大變更
請造訪升級指南,以取得如何更新至 2.0 的說明。
組態
可以使用 npx @turbo/codemod migrate
更新 turbo.json
的重大變更。
- 忽略
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 的持續成長和採用
- 超過 25.2k 個 GitHub 星星
- 每週超過 230 萬次 NPM 下載
- 使用Vercel 遠端快取節省了 347 年的運算時間
Turborepo 是其所有貢獻者(包括我們的核心團隊)共同努力的成果:Anthony、Chris、Greg、Mehul、Mitch、Nicholas 和 Tom。
感謝您持續的支持、意見反應和協作,使 Turborepo 成為您的首選建置工具。如果您尚未加入,請在GitHub 和 Discord 上加入對話。