iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
0
Software Development

模組化設計系列 第 16

Day16 - 管理原始碼的解決方案 Monorepo 和 Polyrepo

管理模組化的原始碼的兩種策略 Monorepo 和 Polyrepo

Monorepo

  • Monorepo 是指在一個 repo 中,管理多個模組。

截至 2017 年,這個軟體工程實踐方式,已有十多年的歷史,但最近才被命名為 Monorepo。 - 維基百科

好處

  • 所有原始碼都放得很靠近,有利於大規模代碼重構。
  • 有統一的地方處理 issue:發 issue 的人,未必會很清楚你的模組切割方式,導致他們不知道要把 issue 發在哪裡。
  • 方便管理模組依賴性跟版號
  • 方便單一流程管理模組所有的建構、測試、發布流程
  • 跨多個模組的送交紀錄,可以統一 rollback。

壞處

  • 一個 repo 的權限,只能有一種設定方式,沒辦法做細部的權限控制。
  • 把所有程式碼放在一起,如原始碼檔案的數量很可觀,如果在不熟悉 Codebase 架構的情況下會有壓迫感。
  • 會讓 repos 變得臃腫,clone 速度變慢。
  • npm 沒辦法用 install github url 的方式安裝模組

常見使用情境

  • 緊密的公司內組織協作和原始碼共享,緊密的協作且擁抱 shared 的組織,沒有太多層的權限控制。
  • 由少數人維護的多個模組 Open Source 專案

實際使用案例

  • Google
  • facebook react:前端框架
  • Uber:ios app
  • Twitter
  • 以太坊的 remix 專案:網頁版 IDE
  • webdriver.io:前端測試框架

延伸閱讀

Polyrepo

  • Polyrepo 是指是在一個 repo 中,管理一個模組,又稱 many repo。

好處

  • 每個模組可以有獨立的權限管理
  • 現有 DevOps 工具對 Polyrepo 有更好支持

壞處

  • 如果一次的修改需求需要一次修改多個模組,那就需要去各別的 repo 修改。
  • 在有很多 repo 的情況下,非次專案的開發者,根本搞不清楚 issue 要發在哪裡。

常見使用情境

  • 公司內部有比較嚴講的原始碼管理制度,跨團隊間無法共享權限時,多數會採用 Polyrepo 的方式來管理。
  • 由很多人共同協作的 Open Source 專案

實際使用案例

  • 比太坊:跨團隊的專案,用不同的 repo 管理。
  • 多數的專案都是 Polyrepo,這裡就不一個一個列出來了

資料來源 / 延伸閱讀


上一篇
Day15 - 切割模組注意事項
下一篇
Day17 - yarn workspace
系列文
模組化設計30

尚未有邦友留言

立即登入留言