MonoRepo是一種將多個專案放在同一個代碼倉庫中管理的方式。相比於每個專案單獨一個倉庫(MultiRepo)的方式,MonoRepo可以更好地解決代碼重複和基礎設施共享等問題。
pnpm工作空間
pnpm是新一代的套件管理工具,可以節省磁碟空間並提升安裝速度。使用pnpm的工作空間功能可以實現基礎的MonoRepo管理:
使用 pnpm-workspace.yaml 定義工作空間結構
使用 -w 參數安裝全域依賴
使用 --filter 參數安裝特定專案的依賴
Changesets版本與發布管理
Changesets用於管理多個套件的版本和更新日誌:
使用 changeset 命令交互式添加變更記錄
使用 changeset version 更新版本號
使用 changeset publish 發布套件
TurboRepo的優勢
TurboRepo是一個高效能的建構系統,具有以下優點:
多任務並行處理,提高建構效率
增量建構,跳過已計算的內容
遠端快取,加速多人協作
基於管道(Pipeline)的任務編排
簡單的配置方式
改造現有MonoRepo專案
只需兩步即可將TurboRepo整合到現有MonoRepo專案中:
安裝 turbo 依賴
在根目錄添加 turbo.json 配置文件
通過在 turbo.json 中定義任務依賴關係,就可以實現高效的任務調度和快取。
TurboRepo 核心概念
TurboRepo 有幾個重要的核心概念:
Pipeline: 在 turbo.json 中定義的任務執行流程
DependsOn: 定義任務之間的依賴關係
拓撲依賴: 根據專案間的依賴關係來排序任務執行
Output: 定義任務的輸出檔案,用於快取
Caching: 本地快取機制,加速重複建構
Remote Caching: 遠端快取,實現團隊間的快取共享
turbo.json 配置說明
turbo.json 是 TurboRepo 的核心配置檔案,主要包含以下內容:
{
"pipeline": {
"build": {
"dependsOn": ["^build"]
},
"test": {
"dependsOn": ["build"]
},
"deploy": {
"dependsOn": ["build", "test", "lint"]
},
"lint": {
"outputs": []
},
"dev": {
"cache": false
}
}
}
dependsOn: 定義任務依賴
outputs: 定義輸出檔案
cache: 控制是否啟用快取
使用 TurboRepo
在 package.json 中配置 scripts:
{
"scripts": {
"build": "turbo run build",
"dev": "turbo run dev --parallel",
"lint": "turbo run lint"
}
}
只要各個子專案的 package.json 中的 scripts 符合 turbo.json 的配置,就可以使用 TurboRepo 來管理整個 MonoRepo 專案。
MonoRepo 工具選擇建議
簡單場景: Pnpm Workspace + Changesets
需要強化任務調度: Pnpm Workspace + Changesets + TurboRepo/Lage
全面且擴展性強: Rush
結論
TurboRepo 為 MonoRepo 專案提供了高效、簡單的解決方案。它通過並行執行、增量建構、遠端快取等特性大幅提升了建構效率。對於大型前端專案,TurboRepo 是一個值得考慮的 MonoRepo 管理工具。