1

monorepo - AruSeito

 2 years ago
source link: https://aruseito.github.io/article/7b6bc5a/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本文最后更新于:2022/01/03 , 星期一 , 22:01

我司代码存放方式比较复杂,n个项目都在同一个代码仓库下,主要是每个项目都没有关系,然后外面搞个大的webpack,每个项目里都有个小的gulp/webpack这样处理,而且没个小项目下都有个.npmrc,指向的文件还都不同。每次即使只修改了其中的某一个小东西,就要全部发布一遍。所以打算搞一下有没有办法优化,在查找资料的时候看到了「monorepo」这种方案,不过最后放弃了这种方案,所以本篇只记录一下自己了解到的monorepo

由于这个仓库下的每个项目都没关系,也不会有互相引用的这种,甚至都不存在公用逻辑部分,唯一通用的可能也就只有框架选择方面,直接拆成了多个仓库来管理。过几天可以分享一下自己的对于这些项目制作cli的经验。

monorepo

单一代码库「monorepo」 与之相对的概念还有「multirepo」多代码库。像react、babel这种管理的都是用monorepo的理念来进行管理的。
其中比较成熟的实现方案有lerna

这里不会去讨论lerna怎么用,而是单纯从体验来聊聊monorepo

monorepo最直观的好处就是调试方便,比如:我们有一个包,在某项目中引用了,但是如果我们发现在这个项目中的场景下有bug,要修改这个npm包,我们可能要先npm link,然后到这个项目里来看。这个时候调试起来就比较麻烦了。monorepo的话就直接引用本地的也没这么花里胡哨的操作,直接一把梭。

还有一点就是基建成本降低,只需要做一套基建流程,直接复用即可。

commit简化,比如之前修改一个功能,可能要横跨两三个库,在这种情况下直接一个commit就可以了,cr起来也更方便。

如果有依赖关系使用这种monorepo的倒是还可以,但是考虑到我们公司这里,只有框架共用的情况,组件都不通用的情况其实多个repo也没什么影响,毕竟也不会直接放到一起去联调。如果单纯为了减少node_modules的话,可能会得不偿失,因为有的项目都好多年没人维护了,但是现在还在用,react版本特别低。频繁改动的项目react版本就会比较高。这种情况可能抽离出来的也比较少了,就需要单独给这个项目处理。

相对的monorepo也是有缺陷的,单从定义来看monorepo要一个repo,所有代码都在里面,硬盘压力大,我明明不需要维护A,我却也要一起给A拉下来。

还有就是构建/测试问题,单repo的话就需要考虑一下 增量构建/测试,按需构建的问题,虽然可以全量,但是搞前端基建不就是为了开发的舒服吗?构建个东西等个1小时那就一点不幸福了。

Monorepo 的开发模式就是将各自独立的项目,变成一个统一的工程整体,使用统一的工作流程,公用基建。

可参考资料


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK