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