第一次接触monorepo
是去年年初,说来非常巧合,当时有个活动页的需求,因为webpack
配的比较菜,听一哥们说parcel
开箱即用写活动页无敌,然后我就去看了。看到parcel
用了lerna
,这激起了我的好奇,觉得这东西挺玄学,一条命令能帮你安装指定工程下的所有依赖,正好当时在学nodejs
也写了一些工具,比如国际化翻译工具、本地mock server、前端页面监控等,把这些工程放在一起,用lerna
包起来,只需install
一次,就可下载所有依赖,这样就实现n个项目变成一个项目,形成闭环。
当然上面的理解是完全不够的,monorepo
顾名思义mono + repository
多个仓库并成单一仓库。monorepo
的使用场景是多模块相互依赖,或者n模块有共同依赖的模块,那么相互引用必然非常麻烦,毕竟谁也不愿意看到一大堆相对路径,现在随着ts的普及,业务开发重度依赖代码提示,如果本身n个模块各自就是独立的项目or库,那tsconfig中的path路径该如何配呢?更要命的是,如果A模块引入了第三方库,而core模块没有,core恰好引入和A的那个方法,还得给core手动yarn add depxxx
,如果出现类似这种很凌乱的情况,那就不要犹豫,直接上monorepo吧,接入方便,只是在外包了层壳。