关于管理多个应用 | 青训营笔记

116 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

刚开始查看团队大项目需求时,发现大项目并不是我想象中只做一个next小应用,实际还要做一个cms应用。两个小项目让我有种使用monorepo的欲望,管理起来会相当方便。可惜,他们共有要用的组件什么的并不是很相近,感觉没有太多放在一起的必要,于是决定放弃使用monorepo。这不妨碍学习一下这个好东西。

monorepo指的是单体仓库,使用一个代码仓库来储存多个应用项目,其中可共用的工具组件等可以实现共享。而对应的多体仓库multirepo则是将许多应用分开管理。两者维护起来都会有各自的优缺点,可以根据场景需求来决定使用哪种管理方式。像大项目这样只需要两个应用的东西建考虑这些问题……就有些多余了。

它是什么

把一个单独的项目比作一个小房子,那么monorepo就像一个社区,整合了供水供电供网供暖(北方限定)等基础设施,还能共享公园等单独小房子做不到的事情。它可以保存多个开发项目project、模块module、包package,他们也许互相关联,但逻辑上又可以做到相对独立。

优点

  • 工作流的一致性 改动代码后所有项目即使感知改动
  • 项目基建成本的降低 减少重复安装相同工具,同时便于遵循统一标准规范
  • 团队协作也更加容易 更方便的提交代码,包括不同开发团队间互相可以提出改动意见

缺点

Uber提到代码过多使git变慢,出现IDEs lockdowns,也有可能遇到一些糟糕的分支合并后污染主分支。(由此可见代码审核制度是多么重要)

创建一个monorepo

这里只给出创建一个空仓库的例子,毕竟大作业应该不是很需要它……

首先在github创建一个仓库,git clone下来。这里创建了公开仓库,使用了MIT协议。

由于已经下载过node pnpm等,因此直接执行pnpm init,生成packages,json文件。没有下载的话……下篇文章我写一下相关内容……

创建并配置pnpm-workspace.yaml,定义工作空间根目录,内容如下

packages:
  - 'packages/**'

之后就可以创建我们需要的文件夹了

在monorepo的目录下可以下载安装一些共用的工具,比如一些组件库、ts等东西,这样里面的应用就不需要再来一遍下载操作了。

如果使用monorepo来管理大项目的话,可以将nextjs项目新建在packages/web里面,而cms介于前后端之间的应用,可以放在后端。

相关文章:

现代前端工程为什么越来越离不开 Monorepo? - 掘金 (juejin.cn)

Monorepo 是什么?你可能需要了解一下 (qwqaq.com)