Menorepo
概述
在单一仓库中管理多个包。
为什么需要单一仓库?
- 减少仓库数量,减少仓库维护成本
- 简化依赖管理,所有项目共享同一个依赖树
方案选择:
- 可行方案:Lerna、NPM/Yarn/PNPM workspaces
- 推荐方案:PNPM workspaces
案例:
- 采用 Yarn Workspaces 方案的项目:vue-cli
- 采用 PNPM workspaces 方案的项目:vue3、vite
参考资料
- https://monorepo.tools
- 带你了解更全面的 Monorepo - 快手数平前端团队
- lerna 还是 pnpm + changesets?- 神说要有光
- https://juejin.cn/post/7181409989670961207
Monorepo 和 Multirepo
Monorepo(单仓库)和 Multirepo(多仓库)是两种不同的代码组织和管理策略。
一般大型开源库都会选择使用 Monorepo,例如 Babal、Vue3 等,而业务项目中通常会选择 Multirepo。
Monorepo
特点:
- 统一代码规范、构建流程、发布流程,所有的包都在一个仓库里
- 代码复用和共享依赖:跨项目共享代码和资源,所有项目共享相同的依赖和版本。将复用逻辑提取到公共包,如
packages/shared
- 团队协作和权限管理:各个包功能独立,便于职责划分。代码权限控制划分不方便,开发者要严格遵守代码规范、提交规范等
- 项目体积大小:单仓库的代码体积较大,可能造成构建和发布时间过长
适用场景:
- 大型组织和项目,尤其是高度相互依赖的项目
- 需要频繁跨项目复用代码和组件的团队
- 强调代码一致性和集中控制的环境
Multirepo
特点:
- 分散管理:每个项目拥有自己的独立仓库
- 独立性:项目间相互隔离,各自拥有独立的生命周期和版本控制
- 灵活性:团队可以根据项目需求自由选择技术和工具链,易于管理权限和访问控制
- 快速迭代:适合快速变化、独立部署的中小型项目。
适用场景: