标准答案

  1. Monorepo 把多个应用、组件库、工具包或配置包放在同一个仓库中统一管理。
  2. 它适合需要频繁跨包联动、统一规范、共享基础库和原子化提交的团队。
  3. 代价是仓库规模变大,权限、CI、缓存、版本发布和依赖边界都更复杂。
  4. pnpm workspace 可以声明工作区包,让包之间用 workspace 协议本地联动。
  5. pnpm 的内容寻址存储和严格依赖结构也能减少重复安装和幽灵依赖问题。

题目解析

Monorepo 解决的是协作和边界问题,不只是目录合并。多个应用共享组件库、工具包、配置包时,同仓库能让一次变更同时修改调用方和被调用方。

代价也很现实:仓库变大后,CI 不能再无脑全量跑;包之间不能随意互相引用;版本发布、权限边界和依赖图都需要治理。

pnpm workspace 的价值在于让本地包引用、安装缓存和依赖声明更可控。它能暴露幽灵依赖,但也意味着迁移旧项目时会发现过去被扁平化 node_modules 掩盖的问题。

代码示例

pnpm workspace 通过 workspace 配置声明包范围。

YAML
packages:
  - apps/*
  - packages/*

常见误区

  • 认为 Monorepo 只是把多个项目放进一个仓库,不需要边界治理。
  • 没有按变更范围优化 CI,任何改动都全量构建。
  • 共享包随意互相依赖,最后形成难以维护的循环依赖。

作者信息