Monorepo & Multirepo

參考資料

大綱

  • 什麼是 monorepo?
  • 什麼是 lerna?
  • 如何利用 lerna 進行項目管理?
  • Q&A

什麼是 monorepo?

  • monorepo:把所有專案放在同一個 repo
  • multirepo:每個專案獨立擁有自己的 repo

monorepo 優點

  • 單個的 lint,build,test 和 release 流程
  • 統一的地方處理 issue
  • 不用到處去找自己項目的 repo
  • 方便管理版本和 dependencies
  • 跨項目的操作和修改變得容易
  • 方便生成 changelog

monorepo 缺點

  • repo 的體積變得很大
  • 安全問題,如何管理權限

誰用 monorepo?

  • Google
  • Babel
  • React & Angular & Vue
  • Nuxt, Vuetify
  • ......

小結

從源碼管理的角度來看,multirepo 與 monorepo 是兩種不同的理念

  • 前者允許多元化發展,各個 module 可以有自己的玩法(構建,依賴管理,單元測試等)
  • 後者希望集中管理,減少玩法差異帶來的溝通成本

什麼是 Lerna?

lerna 是一個管理多個 javascript 包的工具。它屬於monorepo 類型,當你的項目有相關聯時最好使用 monorepo 方式進行管理。

總結

Multirepo 和 Monorepo 的核心區別可以歸結為你相信怎樣的哲學能讓團隊在一起工作的效率最高(多元化 vs 集中管理)。

從 multirepo 的角度來看,這樣讓每個子團隊擁有自己的 repo,可以用他們自己擅長的工具、workflow 等等。多元化能促使各個團隊盡可能的提升自己的效率。

但代價也在於會增加很多溝通成本,如果你在你們項目用到的庫中發現了一個 bug,就必須到目標庫裡修復它、打包、發版本,然後再回到你的庫繼續工作。在不同的 repo 間,你不僅需要處理不同的代碼、工具,甚至是不同的工作流程。甚至你只能去問維護這個 repo 的人,能不能為你做出改變,然後等著他們去解決。

而從 monorepo 來看,讓不同的團隊走自己的路,並不見得能提高生產力。雖然有些團隊可能會找到自己最佳的工作方式,但他們的收益也會被其他團隊不那麼好的工作方式所抵消。相反,嚴格統一的管理更能提升效率,團隊中的任何人都可以(並且應該也被鼓勵)修改任何東西(因為修改造成的結果馬上就能展現出來,)。雖然把所有的雞蛋都放進了一個籃子裡,但我們也可以更小心的照顧這個籃子。

Monorepo &

By hunterliu1003

Monorepo &

  • 403