monorepo总结
Contents
基本概念
monorepo是一种项目管理方式, 就是将多个项目放在一个仓库里。相反的是MultiRepo模式,即每个项目对应一个单独的仓库。
MultiRepo 缺点
各自维护,难以复用。
项目间的代码复用繁琐
基础代码需要在多项目中使用,需要通过封装为npm包引用。但每次修改,需要重新发包,各项目更新包版本。
依赖包版本管理繁琐
- 升级依赖包,需要每个项目都单独升级。
- 依赖重复安装,多个依赖可能在多个仓库中存在不同的版本。
配置需要各自维护
每个项目都需要单独维护开发环境、CI、部署发布流程等配置。
Monorepo 优点
通用部分复用。
代码复用
由于所有的项目代码都集中于一个代码仓库,内部代码可以彼此相互引用。
依赖管理
-
共同依赖可以提取至 root。,版本控制更加容易,依赖管理会变的方便。
-
由于项目在同一个仓库,当某个项目的代码修改后,容易定位会影响到其他哪些项目。
统一配置
所有项目复用一套标准的工具和规范,无需各自维护。
Monorepo 缺点
-
代码安全:代码全在一个仓库,难以对子项目进行权限控制。
-
学习成本:因为聚合多个子项目,导致整个项目复杂度变高,新人需要梳理清楚各代码之间的相互逻辑。
-
增加维护成本:
- 如果缺乏规范化的约束,互相修改代码,会产生各种冲突,commit信息也会难以分辨。在故障排查或版本回滚时更加困难。
- 项目如果变的很庞大,那么 git clone、安装依赖、构建都会是一件耗时的事情。