iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0

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 管理工具。


上一篇
Turborepo的緩存機制
下一篇
Monorepo: 一個倉庫統治所有代碼的神奇魔法
系列文
讓我們一起與turboRepo共舞30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言