monorepo 是什么

monorepo 指的是把多个项目、多个包、多个服务放在同一个代码仓库里统一管理。

比如一个前端项目、一个 Node.js 服务、一个共享组件库、一个工具包,都放在一个仓库中。

multirepo 是什么

multirepo 指的是每个项目、每个服务、每个库都有各自独立的仓库

比如前端一个仓库、后端一个仓库、组件库一个仓库、脚手架再一个仓库,彼此分开维护。

核心区别

维度monorepomultirepo
仓库结构多个项目共用一个仓库每个项目一个仓库
代码管理集中管理分散管理
依赖共享更方便共享代码和类型共享依赖通常要发包或复制
提交方式支持原子提交,一次改动可同时更新多个项目跨仓库改动要分多次提交
协作成本初期规范要求更高团队边界更清晰
CI/CD配置复杂,但可以统一治理各仓库独立,配置更灵活
权限控制粒度较粗粒度更细,便于按仓库分权
仓库体积容易变大单仓库通常更轻

monorepo 的优点

  • 共享代码更方便,比如公共组件、工具函数、类型定义可以直接复用。
  • 跨项目修改更顺手,一次提交就能同时改多个模块。
  • 更适合统一工程规范,比如 lint、test、构建流程、提交规范。
  • 更容易看清整个系统的全貌,适合平台型或基础设施型团队。

monorepo 的缺点

  • 仓库会越来越大,拉取、安装、构建、CI 都可能变慢。
  • 对工程化要求更高,通常要配合 workspace、任务缓存、受影响构建等能力。
  • 如果目录规范和边界没设计好,容易互相耦合。
  • 权限隔离不如 multirepo 自然。

multirepo 的优点

  • 每个仓库职责单一,边界清晰,比较符合“一个服务一个仓库”的思路。
  • 权限管理更灵活,适合不同团队分别维护不同系统。
  • 单个仓库通常更小,理解成本更低。
  • 每个项目可以独立选择发布节奏和 CI/CD 策略。

multirepo 的缺点

  • 公共代码复用不方便,往往需要抽成 npm 包或其他内部依赖。
  • 跨项目联动改动比较麻烦,可能要同时改多个仓库。
  • 版本协调成本更高,尤其是共享库升级时。
  • 工程规范容易不统一,不同仓库可能慢慢长成不同风格。

怎么选

如果你的团队更关注统一管理、共享代码、跨项目协作,那么更适合 monorepo。

如果你的团队更关注服务独立、权限隔离、团队自治,那么更适合 multirepo。

一般来说:

  • 前端组件库 + 主站 + 管理后台 + SDK 这种强关联项目,更适合 monorepo。
  • 多个相对独立的业务系统,或者多个团队分别负责不同服务,更适合 multirepo。

面试版本

  • monorepo 是多个项目放在同一个仓库里统一管理,multirepo 是多个项目分别放在不同仓库中维护。
  • monorepo 的优势是代码共享方便、跨项目改动简单、规范统一;缺点是仓库大、工程复杂度高。
  • multirepo 的优势是边界清晰、权限独立、仓库轻量;缺点是代码复用和跨仓库协作成本更高。
  • 本质区别是:一个强调集中治理,一个强调独立自治