从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项目,快来订阅吧!🤩🤩🤩

总结

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

往期推荐✨✨✨

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

相关推荐
不一样的少年_1 天前
产品催: 1 天优化 Vue 官网 SEO?我用这个插件半天搞定(不重构 Nuxt)
前端·javascript·vue.js
-dcr1 天前
50.智能体
前端·javascript·人工智能·ai·easyui
行者961 天前
Flutter跨平台开发适配OpenHarmony:进度条组件的深度实践
开发语言·前端·flutter·harmonyos·鸿蒙
云和数据.ChenGuang1 天前
Uvicorn 是 **Python 生态中用于运行异步 Web 应用的 ASGI 服务器**
服务器·前端·人工智能·python·机器学习
Albert Edison1 天前
【Git】多人协作一(同一分支下)
git·vscode·svn·github
IT_陈寒1 天前
SpringBoot 3.0实战:这5个新特性让你的开发效率提升50%
前端·人工智能·后端
哈__1 天前
React Native 鸿蒙跨平台开发:LayoutAnimation 实现鸿蒙端页面切换的淡入淡出过渡动画
javascript·react native·react.js
学好statistics和DS1 天前
Git 同步冲突
大数据·git·elasticsearch
遗憾随她而去.1 天前
Webpack 面试题
前端·webpack·node.js
我要敲一万行1 天前
前端文件上传
前端·javascript