monorepo(单体仓库)是什么
Monorepo(Monolithic Repository) 指的是:
将多个项目(服务、库、工具等)统一放在同一个代码仓库中进行管理的开发模式。
与之相对的是 Polyrepo(多仓库):每个项目一个独立仓库。
1. 核心特征
1.1 单一代码仓库
- 所有模块共享一个 Git 仓库
- 统一版本控制、权限、CI/CD
1.2 多项目共存
典型结构:
1 | repo-root/ |
1.3 共享依赖与代码复用
- 公共模块(utils、SDK、组件库)直接引用
- 避免跨仓库同步问题
2. Monorepo(单体) vs Polyrepo(多体)
| 维度 | Monorepo | Polyrepo |
|---|---|---|
| 仓库数量 | 单一仓库 | 多仓库 |
| 依赖管理 | 内部直接引用 | 通过版本发布 |
| CI/CD | 统一流水线 | 分散 |
| 变更协调 | 原子提交(跨项目) | 需要多仓协调 |
| 权限隔离 | 较弱 | 较强 |
| 仓库体积 | 大 | 小 |
3.企业级实践
- Google:超大 Monorepo(数十亿行代码)
- Facebook:内部统一仓库 + Buck/Bazel
4. 适用场景
推荐使用 Monorepo:
- 微服务较多(>10)
- 多前端应用共享组件库
- 强依赖协同开发(API + SDK + UI)
- DevOps 自动化成熟团队
不推荐:
- 强隔离(多租户/多团队)
- 代码敏感(权限要求高)
- 团队协作弱
5.总结
Monorepo 的核心不是“一个仓库”,而是:
通过统一代码空间,实现依赖关系可计算 + 构建可优化 + 发布可自动化