monorepo 是什么
monorepo 指的是把多个项目、多个包、多个服务放在同一个代码仓库里统一管理。
比如一个前端项目、一个 Node.js 服务、一个共享组件库、一个工具包,都放在一个仓库中。
multirepo 是什么
multirepo 指的是每个项目、每个服务、每个库都有各自独立的仓库。
比如前端一个仓库、后端一个仓库、组件库一个仓库、脚手架再一个仓库,彼此分开维护。
核心区别
| 维度 | monorepo | multirepo |
|---|---|---|
| 仓库结构 | 多个项目共用一个仓库 | 每个项目一个仓库 |
| 代码管理 | 集中管理 | 分散管理 |
| 依赖共享 | 更方便共享代码和类型 | 共享依赖通常要发包或复制 |
| 提交方式 | 支持原子提交,一次改动可同时更新多个项目 | 跨仓库改动要分多次提交 |
| 协作成本 | 初期规范要求更高 | 团队边界更清晰 |
| CI/CD | 配置复杂,但可以统一治理 | 各仓库独立,配置更灵活 |
| 权限控制 | 粒度较粗 | 粒度更细,便于按仓库分权 |
| 仓库体积 | 容易变大 | 单仓库通常更轻 |
monorepo 的优点
- 共享代码更方便,比如公共组件、工具函数、类型定义可以直接复用。
- 跨项目修改更顺手,一次提交就能同时改多个模块。
- 更适合统一工程规范,比如 lint、test、构建流程、提交规范。
- 更容易看清整个系统的全貌,适合平台型或基础设施型团队。
monorepo 的缺点
- 仓库会越来越大,拉取、安装、构建、CI 都可能变慢。
- 对工程化要求更高,通常要配合 workspace、任务缓存、受影响构建等能力。
- 如果目录规范和边界没设计好,容易互相耦合。
- 权限隔离不如 multirepo 自然。
multirepo 的优点
- 每个仓库职责单一,边界清晰,比较符合“一个服务一个仓库”的思路。
- 权限管理更灵活,适合不同团队分别维护不同系统。
- 单个仓库通常更小,理解成本更低。
- 每个项目可以独立选择发布节奏和 CI/CD 策略。
multirepo 的缺点
- 公共代码复用不方便,往往需要抽成 npm 包或其他内部依赖。
- 跨项目联动改动比较麻烦,可能要同时改多个仓库。
- 版本协调成本更高,尤其是共享库升级时。
- 工程规范容易不统一,不同仓库可能慢慢长成不同风格。
怎么选
如果你的团队更关注统一管理、共享代码、跨项目协作,那么更适合 monorepo。
如果你的团队更关注服务独立、权限隔离、团队自治,那么更适合 multirepo。
一般来说:
- 前端组件库 + 主站 + 管理后台 + SDK 这种强关联项目,更适合 monorepo。
- 多个相对独立的业务系统,或者多个团队分别负责不同服务,更适合 multirepo。
面试版本
- monorepo 是多个项目放在同一个仓库里统一管理,multirepo 是多个项目分别放在不同仓库中维护。
- monorepo 的优势是代码共享方便、跨项目改动简单、规范统一;缺点是仓库大、工程复杂度高。
- multirepo 的优势是边界清晰、权限独立、仓库轻量;缺点是代码复用和跨仓库协作成本更高。
- 本质区别是:一个强调集中治理,一个强调独立自治。