從源碼管理的角度來看,multirepo 與 monorepo 是兩種不同的理念
lerna 是一個管理多個 javascript 包的工具。它屬於monorepo 類型,當你的項目有相關聯時最好使用 monorepo 方式進行管理。
Multirepo 和 Monorepo 的核心區別可以歸結為你相信怎樣的哲學能讓團隊在一起工作的效率最高(多元化 vs 集中管理)。
從 multirepo 的角度來看,這樣讓每個子團隊擁有自己的 repo,可以用他們自己擅長的工具、workflow 等等。多元化能促使各個團隊盡可能的提升自己的效率。
但代價也在於會增加很多溝通成本,如果你在你們項目用到的庫中發現了一個 bug,就必須到目標庫裡修復它、打包、發版本,然後再回到你的庫繼續工作。在不同的 repo 間,你不僅需要處理不同的代碼、工具,甚至是不同的工作流程。甚至你只能去問維護這個 repo 的人,能不能為你做出改變,然後等著他們去解決。
而從 monorepo 來看,讓不同的團隊走自己的路,並不見得能提高生產力。雖然有些團隊可能會找到自己最佳的工作方式,但他們的收益也會被其他團隊不那麼好的工作方式所抵消。相反,嚴格統一的管理更能提升效率,團隊中的任何人都可以(並且應該也被鼓勵)修改任何東西(因為修改造成的結果馬上就能展現出來,)。雖然把所有的雞蛋都放進了一個籃子裡,但我們也可以更小心的照顧這個籃子。