什么是 Monorepo?它和 Multirepo 相比有什么优缺点?在实践中如何选择
Monorepo 是一种将多个逻辑上独立,但是可能相互关联的代码,统一放在一个 Git 仓库中的管理策略。
采纳 Monorepo 的主要目的是为了提升代码的复用和协作效率。在同一个 Monorepo,组件库等共享元素可以不发布到 npm 而是只在内部直接引用。这使得跨项目重构和功能开发可以原子化提交,保证了代码的一致性。同时,一套统一的构建标准,极大的降低了多项目的复杂度。
但是这种形式导致整个仓库异常庞大,Commit 提交权限也难以管理。模块与模块直接的不当依赖关系,可能会影响仓库的按需构建,拉长整个 CI 流程。
至于选型,其实只要看不同项目之间是否存在关联即可。我的选择时,前期默认一个 monorepo,当需要不同团队维护的时候,在分离即可。