monorepo&multirepo
无论是 monorepo 还是 multirepo,都是在面对多个项目的时候一套项目代码管理的方案。
repo 指的是 repository,即仓库。
mono 是单一的意思,multi 是多数的意思。
结合起来理解就是,monorepo 是通过单个仓库来管理多个项目,multirepo 是通过多个仓库来管理多个项目。

monorepo 的优点:
- 共享公共资源:多个相似的项目可以共享公共资源,如组件、工具方法、api等,提供代码复用性和维护成本。
- 统一管理依赖版本:因为所有项目的依赖都在同一个目录中进行管理,所以能使所有项目的依赖保持一致性,有效减少版本冲突和依赖问题。
- 统一的规范标准:只需要定制一套规范标准,就可以应用到所有项目。

monorepo 的缺点:
- 代码仓库的规模:当项目数量增加,代码仓库的体积就会变得越来越庞大。
- 缺乏独立版本的控制:所有项目共享相同的提交历史,可能会导致独立版本的控制变得非常复杂。
- 权限和安全性问题:由于所有项目都是在同一个代码库里面,权限控制会变得比较困难,安全性就会变得弱一些。
下面有一张表对比了两个多项目代码管理风格的区别:
| monorepo | multirepo | |
|---|---|---|
| 开发 | 只需要在一个仓库中开发,编码方便,新成员入门简单 | 仓库体积小,模块划分清晰。 |
| 复用 | 代码复用高,方便进行代码重构 | 需要多仓库来回切换,无法实现跨项目代码复用 |
| 工程配置 | 所有项目统一使用相同的工程配置 | 各个项目可能有一套单独标准 |
| 依赖管理 | 共同依赖可以提升到 root,版本控制更加容易,依赖管理会变得更方便 | 不同的项目会安装相同的依赖,但即便相同的依赖会存在版本不同的情况 |
| 代码管理 | 代码全在一个仓库,项目太大用 git 管理会存在问题,无法隔离项目代码权限 | 各个团队可以控制代码权限,也几乎不会有项目太大的问题 |
| 部署 | 有 lerna 工具支持 | 如果多项目存在依赖关系,开发就需要在不同的仓库按照依赖先后顺序去修改版本以及进行部署 |