Turborepo 1.6
Turborepo 1.6 改變了 Turborepo 的遊戲規則 - 您現在可以在任何專案中使用它。
- 在非 Monorepo 中使用 Turborepo: 專案建置速度緩慢?您現在可以使用 Turborepo 加速任何具有
package.json
的程式碼庫中的建置。 turbo prune
現在支援 npm: 在使用npm
的 Monorepo 中,現在支援修剪您的 Monorepo,完整支援所有主要的 workspace 管理器。- 更快的快取: 我們改進了處理本機檔案寫入的方式,這意味著 Turborepo 快取速度大幅提升。
立即執行 npm install turbo@latest
來更新。
任何程式碼庫都可以使用 Turborepo
Turborepo 幫助加速您的程式碼庫中的任務。到目前為止,我們專門為 Monorepo 建構了 Turborepo - 包含多個應用程式和套件的程式碼庫。
Turborepo 在 Monorepo 中非常出色,因為它們有許多任務要處理。每個套件和應用程式都需要建置、程式碼檢查和測試。
但我們開始思考:許多非 Monorepo 的程式碼庫也執行大量任務。大多數 CI/CD 流程都會執行許多重複的工作,這些工作可以從 快取 中受益。
因此,我們很高興宣布任何程式碼庫現在都可以使用 Turborepo。
立即從範例開始,或將 Turborepo 新增到現有專案中,立即試用看看
將 Turborepo 新增到您的專案
- 安裝
turbo
- 在您的新儲存庫的根目錄新增一個
turbo.json
檔案
- 嘗試使用
turbo
執行build
和lint
恭喜 - 您剛剛使用 turbo
執行了您的第一個建置。您可以嘗試
我應該在何時使用 Turborepo?
Turborepo 可用於非 Monorepo 開啟了許多新的使用案例。但在什麼情況下它能發揮最佳效用呢?
當腳本相互依賴時
您應該使用 turbo
來執行您的 package.json
腳本。如果您有多個相互依賴的腳本,您可以將它們表示為 Turborepo 任務
然後,您可以執行
因為您已聲明 build
應在 lint
和 test
之前執行,所以當您執行 lint
或 test
時,它會自動為您執行 build
。
不僅如此,它還會為您找出最佳排程。前往我們的核心概念文件,了解 最佳化速度。
當您想要並行執行任務時
想像一下,您正在執行一個 Next.js 應用程式,同時也執行 Tailwind CLI。您可能有兩個腳本 - dev
和 dev:css
無需在您的 turbo.json
中新增任何內容,您就可以執行
就像 concurrently
之類的工具一樣,Turborepo 會自動並行執行這兩個腳本。
這對於開發模式非常有用,但也可以用於加速 CI 上的任務 - 想像一下您有多個腳本要執行
Turborepo 將找出最快的方式並行執行您的所有任務。
Prune 現在支援 npm
在過去的幾個版本中,我們一直在為不同的 workspace 管理器新增對 turbo prune
的支援。這一直是一個挑戰 - turbo prune
會建立您 Monorepo 的子集,包括修剪鎖定檔中的依賴項。這表示我們必須為每個 workspace 管理器分別實作邏輯。
我們很高興宣布 turbo prune
現在適用於 npm
,完整支援所有主要的套件管理器。這表示如果您的 Monorepo 使用 npm
、yarn
、yarn 2+
或 pnpm
,您將能夠輕鬆部署到 Docker。
查看我們之前關於 turbo prune
的部落格以了解更多資訊。
快取效能改進
在 1.6 之前,Turborepo 的本機快取是對系統上檔案的遞迴複製,複製到磁碟上的另一個位置。這很慢。這表示對於我們需要快取的每個檔案,我們都需要執行六個系統呼叫:來源檔案上的開啟、讀取和關閉;目的地檔案上的開啟、寫入和關閉。
在 1.6 中,我們將其減少了近一半。現在,在建立快取時,我們會建立一個單一的 .tar
檔案(一次開啟),我們以 1mb 區塊寫入它(批次寫入),然後關閉它(一次關閉)。系統呼叫減半的狀況也發生在從快取中取出的過程中。
我們並沒有就此止步。在過去一個月中,我們在建置工具鏈上投入了大量資金,以啟用 CGO,這解鎖了使用以 C 語言編寫的最佳類別函式庫。這使我們能夠採用 Zstandard 的 libzstd
進行壓縮,這為我們帶來了演算法上 3 倍的壓縮效能提升。
在所有這些變更之後,我們經常看到本機快取建立的效能提升超過 2 倍,遠端快取建立的效能提升超過 3 倍。您的儲存庫越大,或您的裝置越慢(說的就是您,CI),情況就越好。這表示我們能夠精確地為那些最需要它的人提供效能提升。