monorepo(单体仓库)是什么

Monorepo(Monolithic Repository) 指的是:

将多个项目(服务、库、工具等)统一放在同一个代码仓库中进行管理的开发模式。

与之相对的是 Polyrepo(多仓库):每个项目一个独立仓库。


1. 核心特征

1.1 单一代码仓库

  • 所有模块共享一个 Git 仓库
  • 统一版本控制、权限、CI/CD

1.2 多项目共存

典型结构:

1
2
3
4
5
6
7
8
9
10
11
repo-root/
├── apps/
│ ├── web-app/
│ ├── api-server/
├── packages/
│ ├── shared-utils/
│ ├── ui-components/
├── infra/
│ ├── terraform/
│ ├── k8s/
├── tools/

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 的核心不是“一个仓库”,而是:
通过统一代码空间,实现依赖关系可计算 + 构建可优化 + 发布可自动化