Monorepo(單一程式碼儲存庫)是一種軟體開發策略,指的是將多個不同專案的程式碼都存放在同一個版本控制儲存庫(如 Git)中。這與傳統的「多儲存庫」(polyrepo)模式相反,後者是每個專案都擁有獨立的儲存庫。
Monorepo 的主要特點
- 單一儲存庫:所有專案的程式碼,不論是前端、後端、共用函式庫還是行動應用程式,都集中在一個地方。
- 共享與協作:不同團隊或專案可以輕鬆存取、修改和共用彼此的程式碼和資源。
- 一致性:可以更輕鬆地統一程式碼風格、建構工具和依賴項版本。
Monorepo 的優點
- 程式碼共用和重用:當一個團隊開發了一個通用的函式庫,其他團隊可以立即在同一個儲存庫中引用它,無需發布為單獨的套件。這大大簡化了程式碼的重用流程。
- 簡化跨專案重構:如果你需要修改一個被多個專案使用的核心函式,在 Monorepo 中可以一次性修改所有受影響的專案,並確保它們都能正常運作,從而減少了版本同步和相容性問題。
- 單一版本控制:所有專案都使用同一份程式碼歷史紀錄。這有助於追蹤變更,並確保所有開發人員都使用相同版本的工具和依賴項。
- 改善協作效率:開發者可以輕鬆地查看其他團隊的工作進度,並能更方便地進行程式碼審查和協調,避免重複造輪子。
Monorepo 的缺點
- 儲存庫體積龐大:隨著專案的增多,儲存庫會變得非常大,導致克隆(clone)和拉取(pull)操作變得緩慢。
- 權限管理複雜:在單一儲存庫中,管理不同團隊對不同專案的存取權限可能會比較困難。
- 建構與測試挑戰:如果每次程式碼提交都觸發所有專案的建構和測試,會消耗大量的時間和運算資源。這需要使用像 Bazel、Nx 或 Lerna 這類的專業工具來解決,這些工具可以只建構和測試受變更影響的專案。
- 學習曲線:導入和維護 Monorepo 需要團隊學習新的工具和工作流程,這可能會有一定的學習成本。
總結
選擇 Monorepo 還是多儲存庫取決於團隊的規模和專案的特性。如果你的團隊規模較小,專案之間的依賴性不高,多儲存庫可能是一個更簡單的選擇。但對於需要高度程式碼共用、協同作業和大規模重構的組織來說,Monorepo 是一個值得考慮的策略。