关于monorepo的一点感悟

267 阅读1分钟

什么是monorepo,为什么要选择他?

正常情况下,多个项目使用多个git仓库来管理的,每个项目维护自己的npm包依赖,这种可以称为mutlirepomonorepo是多个项目放在一个git仓库中,并以package的方式来划分项目,个人总结他的优点如下:

  1. 集中管理,减少项目间的差异带来的沟通成本(比如统一的地方处理issue);
  2. 多个项目相互依赖时调试变得简单;
  3. 方便管理版本和依赖管理。 为啥要选择他或者说什么时候该选择他呢,我觉得上面的优点说明了一切:类库/组件库等非业务代码都可以使用该方式管理。 目前使用monorepo的有:vue3、vite、babel、element-plus等

monorepo的最佳实践:lerna + yarn workspace

这里不细说lernayarn workspace的具体用法了,网上有很多这种文章,只谈这两者的合作模式,我的理解是:

  1. 所有和包依赖相关的都使用yarn workspace来处理;
  2. 版本管理和发布则使用lerna。 也就是说你的仓库脚本中不应该出现:lerna bootstraplerna addlerna安装包的命令,而是用yarn iyarn workspace pkg1 add pkg2来代替;

lerna版本管理和发布流程:

使用lerna publish来发布,lerna会根据你的git提交记录来进行版本管理,并会让你选择版本号,选择完成后lerna会自动更新相关的版本号然后发布; 如果需要单独发布某个包:lerna publish --force-publish [packageName]