标准答案
- Monorepo 把多个应用、组件库、工具包或配置包放在同一个仓库中统一管理。
- 它适合需要频繁跨包联动、统一规范、共享基础库和原子化提交的团队。
- 代价是仓库规模变大,权限、CI、缓存、版本发布和依赖边界都更复杂。
- pnpm workspace 可以声明工作区包,让包之间用 workspace 协议本地联动。
- pnpm 的内容寻址存储和严格依赖结构也能减少重复安装和幽灵依赖问题。
题目解析
Monorepo 解决的是协作和边界问题,不只是目录合并。多个应用共享组件库、工具包、配置包时,同仓库能让一次变更同时修改调用方和被调用方。
代价也很现实:仓库变大后,CI 不能再无脑全量跑;包之间不能随意互相引用;版本发布、权限边界和依赖图都需要治理。
pnpm workspace 的价值在于让本地包引用、安装缓存和依赖声明更可控。它能暴露幽灵依赖,但也意味着迁移旧项目时会发现过去被扁平化 node_modules 掩盖的问题。
代码示例
pnpm workspace 通过 workspace 配置声明包范围。
YAML
packages:
- apps/*
- packages/*常见误区
- 认为 Monorepo 只是把多个项目放进一个仓库,不需要边界治理。
- 没有按变更范围优化 CI,任何改动都全量构建。
- 共享包随意互相依赖,最后形成难以维护的循环依赖。