2025-02-12 02:04
【軟件開發:Monorepo】
在現代軟件開發中,每一個項目都會對應一個 Git 儲存庫,然後在儲存庫上建立 CI/CD。當過了一時間後,一個系統可能會分拆成不同部件,而我們就需要決定部件應放在同一個版本控制儲存庫,或是分散在不同的儲存庫上。
Monorepo 就是一個把所有部件都集中在一起的策略。以一個有UI的應用程式為例,當中的前端、后端都會放在同一個儲存庫上,並以資料夾管理。這樣有幾個好處:
1. 簡化依賴管理,部件之間只需要利用目錄路徑去引用代碼,而不用為共享庫不斷發布新版本。
2. 促進團隊之間的協作,因為不同團隊在同一個儲存庫中修改,當中一定要有適當的溝通,也間接鼓勵代碼重用。
3. 簡化發布流程,因為發布版本可以利用版本控制中的 Tag
4. 透過統一工具和開發流程,可以確保不同模組之間的一致性,減少因環境差異而導致的問題。
當然,所有技術決策都只是特定情境下比較好的 trade off,所以Monorepo在某些情境下好處會變成壞處。例如當中的耦合令代碼改變容易觸發不必要的CI/CD,如果改變只是一個部件。另外Monorepo也令代碼 ownership 變得複雜。