Skip to content

ADR-001:采用 Monorepo 管理前端代码库

状态

已采纳(Adopted)

背景

公司目前有 8 条业务线,每条业务线都有自己的前端仓库(Polyrepo)。随着业务发展,出现以下问题:

  1. 相同组件(Button、Table、Form)在多个仓库重复开发,复用率低。
  2. 组件库版本管理混乱,不同业务线引用的组件库版本不一致。
  3. 跨仓库调试和联调成本高,一个问题可能涉及多个仓库修改。
  4. CI/CD 配置分散,维护成本高。

决策目标

  • 提高组件和工具函数的复用率。
  • 统一技术栈和工程化配置。
  • 降低跨业务线协作成本。
  • 支持独立发布和灰度更新。

备选方案

方案 1:保持 Polyrepo

  • 优点:仓库独立,权限管理简单,构建速度快。
  • 缺点:复用困难,版本管理混乱,协作成本高。

方案 2:采用 Monorepo(pnpm workspace + Turborepo)

  • 优点:便于复用、统一构建、统一 CI/CD、支持跨包重构。
  • 缺点:仓库体积大,需要学习 Monorepo 工具链,权限管理稍复杂。

方案 3:Git Submodules

  • 优点:保留独立仓库,又能引用共享代码。
  • 缺点:管理复杂,容易出现版本不一致,体验不如 Monorepo。

决策

采用 方案 2:Monorepo(pnpm workspace + Turborepo)

权衡(Trade-off)

维度影响说明
复用性✅ 显著提升共享组件库、工具函数、类型定义
协作成本✅ 降低一个 PR 可以修改多个相关包
构建复杂度⚠️ 增加需要 Turborepo 管理依赖图和缓存
权限管理⚠️ 需要适配使用 CODEOWNERS 控制各包负责人
学习成本⚠️ 中团队需要学习 pnpm workspace 和 Changesets

实施计划

  1. 第 1 周:搭建 Monorepo 基础结构,迁移共享组件库。
  2. 第 2-4 周:逐步迁移各业务线应用。
  3. 第 5 周:接入 Turborepo 远程缓存和 Changesets 版本管理。
  4. 第 6 周:灰度切换,验证 CI/CD 流水线。

相关决策

  • ADR-002:组件库版本管理采用 Changesets
  • ADR-003:CI/CD 采用 GitHub Actions + Turborepo

决策人

  • 前端架构师:张三
  • 技术总监:李四

日期

2026-03-10

最后更新

2026-06-24

基于 MIT 协议发布