核心用法
本技能提供 Monorepo 全生命周期管理方案,涵盖三大核心场景:
1. 工具链选型与初始化
- 包管理器:推荐 pnpm(严格依赖隔离 + 优异 workspace 支持),npm/Yarn 作为备选
- 构建系统:Turborepo 为默认首选(配置简洁、远程缓存成熟);Nx 适用于大型组织需代码生成、依赖图可视化的场景
- 目录规范:
apps/存放可部署应用,packages/存放共享库,形成清晰边界
2. 构建与任务编排
- Turborepo 通过
turbo.json定义任务管道,关键配置包括: dependsOn: ["^build"]实现拓扑排序构建inputs/outputs精确控制缓存失效范围persistent: true标记长期运行的 dev 服务- Nx 提供
nx affected能力,仅构建变更影响的项目,大型仓库节省显著
3. CI/CD 与发布
- GitHub Actions 配合
fetch-depth: 0支持 affected 计算 - Changesets 实现自动化版本管理与 npm 发布
- 远程缓存(Vercel Turborepo 或自托管)实现"秒级"重复构建
显著优点
- 性能优化:任务并行执行 + 智能缓存 + 远程共享,构建时间从分钟级降至秒级
- 代码共享:类型定义、工具配置、UI 组件跨项目复用,消除版本漂移
- 原子变更:跨包修改一次性提交,保证系统一致性
- 标准化:统一的 ESLint、TypeScript、Prettier 配置通过 workspace 分发
潜在局限
- Git 规模问题:历史记录随项目增长膨胀,clone 时间延长
- 权限管理粗粒度:Monorepo 天然难以实现包级访问控制
- 学习成本:Nx 尤其陡峭,团队需理解依赖图、任务管道等概念
- 工具锁定:深度采用 Turborepo/Nx 后迁移成本较高
适合人群
- 维护 3+ 相关项目的中大型团队
- 需要前后端共享类型定义的全栈项目
- 追求 CI 构建速度优化的工程团队
- 准备从 multi-repo 迁移的架构决策者
常规风险
- 缓存配置错误:过于宽松的
inputs导致缓存命中不当,可能发布陈旧构建产物 - 循环依赖:包间循环引用破坏构建拓扑,需重构拆分
- 幽灵依赖:pnpm 严格模式下未声明的依赖直接报错,需规范依赖声明
- Dev 任务误缓存:开发服务器任务必须设置
cache: false,否则造成异常