Skip to content

monorepo

什么是 monorepo

多项目单一仓库管理方案(多项目管理方案)

概念:一个仓库管理多个项目的工程化开发管理模式

  • 优势:

    1. 便于代码和依赖在多个项目之间的共享复用
    2. 更方便简单的项目版本控制(统一管理依赖
    3. 提高多项目的构建与部署的便捷性(CI/CD)
    4. 简化版本控利:只需要管理一个仓库,统一发布和版本控制更方便
    5. 提高团队协作的便利性
  • 缺点:

    1. 维护成本上升
      • 复杂度增加:随着项目数量增多,仓库结构变得复杂,新成员上手难度变大
      • 需要引入额外工具链(如 Lerna、Turborepo、Nx、pnpm workspace)来管理依赖和构建流程
    2. 权限与安全问题
      • 所有项目都在一个仓库中,无法像多仓库那样灵活设置访问权限
      • 安全性风险集中,一旦主仓库被攻击或误操作,所有项目都可能受到影响
    3. 性能与构建效率问题
      • 随着项目和模块增加,仓库可能变得非常庞大,影响克隆和构建速度
      • 如果没有良好的增量构建机制(如 Nx、Turborepo),每次全量构建会非常耗时

发展历程

  • 单体仓库单应用模式:一个仓库管理一个单应用
    • 缺点:随着项目的功能迭代,单体应用的规模会逐渐变大,难以维护
  • 多仓库多应用模式:多个应用分配给多个对于的仓库进行管理
    • 缺点:无法进行项目依赖与代码的共享,多应用之间的结合变得复杂困难
  • 单仓库多应用模式:一个仓库管理多个应用
    • 优点:业务代码分离解耦,应用间共享依赖与代码、项目配置和构建部署、项目扩展更方便

什么情况采用 monorepo

1. 多个项目之间存在强依赖关系

  • 适用场景:多个子项目之间需要共享代码、组件、工具库或配置。
  • 优势
    • 可以直接引用本地代码,无需发布私有 NPM 包。
    • 修改公共模块后,所有依赖项目立即生效,便于快速迭代。

示例:UI 组件库 + 多个业务应用共用一个仓库

2. 统一版本控制与协同开发需求高

  • 适用场景:多个项目由同一团队维护,且需保证依赖版本一致性。
  • 优势
    • 所有项目的依赖版本可以在一个地方统一升级。
    • 避免“依赖地狱”问题,减少不同项目间版本冲突。

示例:前端主应用 + 微前端子应用 + 公共 SDK

❌ 不推荐使用情况:

  1. 小型独立项目
  2. 项目完全独立,无共享逻辑