从0到1搭一个monorepo项目(一)

引言

大家好啊,我是前端拿破轮。😁

作为一名前端开发工程师,git 是我们每天要打交道的东西。我们利用 git 进行分布式的代码管理和版本控制,也让多人协作开发变得更为快捷。

最近在做毕业设计,计划设计一个无人自习室的管理系统 ,包括App用户端Web商家管理端 以及服务端 。也就是说,拿破轮要向着全栈工程师迈进了。😏😏😏

在技术选型上,我决定以React + TypeScript + Nest.js 作为核心技术栈,利用React Native 的跨平台能力来开发 App 用户端,利用 React 开发商家Web系统,利用 Nest.js来开发服务端。

然而当我正在做起来,我才发现很多令人不爽的地方。

重复配置基建

首先就是如果按照传统的模式 ,我们创建3个仓库 ,分别用来存储 App 用户端和 Web 端以及服务端的代码。但是我这三个项目的模块的核心语言都是 TypeScript,所以像tsconfig.jsoneslint.config.jsprettier.config.js等很多的配置在三个项目中是通用 的。由于我将他们放在三个不同的 git 仓库中,我需要在每一个仓库中都进行一次重复的配置工作 。😵‍💫😵‍💫😵‍💫此外,一些和技术栈无关的项目配置比如commitlinthuskycspell等也都需要进行重复配置

代码重用困难

而且更麻烦的是,由于我这三个模块之间其实是紧密关联的,比如 App 用户端和 Web 端很多的接口都是通用的,DTO(Data Transfer Object)也一样,目前的分仓库做法导致我要在 App 端,Web端和服务端定义很多重复的类型声明文件 来约束DTO。而且这种重复的方式还很容易出现不一致 的问题,当DTO等公用模块修改时,需要在每个仓库中都进行修改,导致了很多重复的工作量。

那么有没有什么样的技术来解决上述问题呢?答案就是我们接下来要展开阐述的monorepo

什么是monorepo

monorepo全称Monolithic Repository,字面意思是 "整体式的仓库" ,指的是单个 git 仓库中包含多个项目 ,可以进行统一管理。与之相对应的就是multirepo,即Multiple Repository,就是我们过去通常使用的不同的项目存储在不同的 git 仓库中,在多个仓库中分别进行管理。如下图所示:

使用monorepo,能够很好地解决上述问题:

  • 三个模块只有一个 git 仓库,所以基建只用搭一次
  • 利用pnpm等工具的workspace能力直接软链接 最新的公用模块,不用再写重复代码,也避免了不一致的问题。

但是monorepo也不是完全没有缺点:

  • 仓库大,克隆,拉取,CI/CD资源消耗高
  • 难以进行权限控制,拉取仓库后所有代码都可以看见。

所以monorepo比较适合整体代码量不是特别巨大,模块之间耦合紧密,希望统一开发规范,测试和构建按流程 的项目。比如说拿破轮上面提到的毕业设计的场景,App 端和 Web端以及服务端之间有很多公用的模块和功能,耦合比较紧密,而且整个项目代码量不会特别大,所以比较适合采用monorepo进行管理。但是比如说你们公司有一个电商业务,又有一个小游戏的业务,两者分马牛不相及,如果采用monrepo可能会适得其反。

说了这么多,那具体怎么搭建一个monorepo的项目呢?🧐🧐🧐

具体的搭建项目过程,咱们下篇接着聊。

关注本专栏Monorepo项目搭建,带你从0到1搭建一个monorepo项目,快来订阅吧!🤩🤩🤩

总结

好了,这篇文章就到这里啦,如果对您有所帮助,欢迎点赞,收藏,分享👍👍👍。您的认可是我更新的最大动力。由于笔者水平有限,难免有疏漏不足之处,欢迎各位大佬评论区指正。

往期推荐✨✨✨

我是前端拿破轮,关注我,一起学习前端知识,咱们下期见!

相关推荐
heytoo2 分钟前
同一个模型,为什么结果差10倍?差的不是模型
前端·agent
霪霖笙箫3 分钟前
「JS全栈AI学习」九、Multi-Agent 系统设计:架构与编排
前端·面试·全栈
慕斯fuafua4 分钟前
CSS——定位
前端·css
Cache技术分享5 分钟前
384. Java IO API - Java 文件复制工具:Copy 示例完整解析
前端·后端
shadowcz0076 分钟前
Chrome Skills 来了:把你的 AI 提示词变成一键工具
前端·人工智能·chrome
踩着两条虫7 分钟前
VTJ核心引擎开源项目概览
前端·vue.js·低代码
Front思7 分钟前
解决 uniapp Dart Sass 2.0.0 弃用警告
前端·uni-app·sass
农夫山泉不太甜8 分钟前
CSS 新特性与冷门属性深度剖析
前端
无限进步_9 分钟前
【C++】私有虚函数与多态:访问权限不影响动态绑定
开发语言·c++·ide·windows·git·算法·visual studio
Hy行者勇哥9 分钟前
Chrome 浏览器如何“网页长截图”和“网站打包成应用”
前端·chrome