Appearance
monorepo
什么是 monorepo
多项目单一仓库管理方案(多项目管理方案)
概念:一个仓库管理多个项目的工程化开发管理模式
优势:
- 便于代码和依赖在多个项目之间的共享和复用
- 更方便简单的项目版本控制(统一管理依赖)
- 提高多项目的构建与部署的便捷性(CI/CD)
- 简化版本控利:只需要管理一个仓库,统一发布和版本控制更方便
- 提高团队协作的便利性
缺点:
- 维护成本上升
- 复杂度增加:随着项目数量增多,仓库结构变得复杂,新成员上手难度变大
- 需要引入额外工具链(如 Lerna、Turborepo、Nx、pnpm workspace)来管理依赖和构建流程
- 权限与安全问题
- 所有项目都在一个仓库中,无法像多仓库那样灵活设置访问权限
- 安全性风险集中,一旦主仓库被攻击或误操作,所有项目都可能受到影响
- 性能与构建效率问题
- 随着项目和模块增加,仓库可能变得非常庞大,影响克隆和构建速度
- 如果没有良好的增量构建机制(如 Nx、Turborepo),每次全量构建会非常耗时
- 维护成本上升
发展历程
- 单体仓库单应用模式:一个仓库管理一个单应用
- 缺点:随着项目的功能迭代,单体应用的规模会逐渐变大,难以维护
- 多仓库多应用模式:多个应用分配给多个对于的仓库进行管理
- 缺点:无法进行项目依赖与代码的共享,多应用之间的结合变得复杂困难
- 单仓库多应用模式:一个仓库管理多个应用
- 优点:业务代码分离解耦,应用间共享依赖与代码、项目配置和构建部署、项目扩展更方便
什么情况采用 monorepo
✅ 1. 多个项目之间存在强依赖关系
- 适用场景:多个子项目之间需要共享代码、组件、工具库或配置。
- 优势:
- 可以直接引用本地代码,无需发布私有 NPM 包。
- 修改公共模块后,所有依赖项目立即生效,便于快速迭代。
示例:UI 组件库 + 多个业务应用共用一个仓库
✅ 2. 统一版本控制与协同开发需求高
- 适用场景:多个项目由同一团队维护,且需保证依赖版本一致性。
- 优势:
- 所有项目的依赖版本可以在一个地方统一升级。
- 避免“依赖地狱”问题,减少不同项目间版本冲突。
示例:前端主应用 + 微前端子应用 + 公共 SDK
❌ 不推荐使用情况:
- 小型独立项目
- 项目完全独立,无共享逻辑