Monorepo
Monorepo概念上很好理解,其实就是多个项目使用一个仓库来管理。
Vue 3、Yarn、Npm7 等等知名开源项目的源码也是采用 Monorepo 的方式来进行管理的。
一般 Monorepo 的目录如下所示,在 packages 存放多个子项目,并且每个子项目都有自己的package.json:
├── packages
| ├── pkg1
| | ├── package.json
| ├── pkg2
| | ├── package.json
├── package.json
MultiRepo
MultiRepo则就是一个项目一个仓库
- 劣势
-
代码复用
在维护多个项目的时候,肯定会有重复的逻辑,例如一些基础组件,工具函数,以及公共配置等,你可能会直接 copy代码,但有个问题是,如果这些代码出现 bug、或者需要做一些调整的时候,就得修改多份,维护成本越来越高。此时,你可能想到发布一个npm包。举个例子,比如你引入了 1.1.0 版本的 A 包,某个工具函数出现问题了,你需要做这些事情:
- 去修改一个工具函数的代码
- 发布1.1.1版本的新包
- 项目中安装新版本的 A。
-
版本管理
例如如我们上面所述,发布一个npm包,那么我们所有用到这个npm包的项目,我们都得挨个更新,很麻烦。 -
项目搭建
在 MultiRepo 中,每个项目需要单独配置开发环境、配置 CI 流程、配置部署发布流程等等,这些逻辑都是重复的,如果是 10 个项目,就需要维护 10 份流程,逻辑重复不说,各个项目间存在构建、部署和发布的规范不能统一的情况,这样维护起来就更加麻烦了。
使用案例
- pnpm-workspace (https://pnpm.io/zh/workspaces)
网友评论