写点什么

Monorepo 能给前端工程带来什么

  • 2022 年 8 月 23 日
    北京
  • 本文字数:2011 字

    阅读完需:约 7 分钟

Monorepo 能给前端工程带来什么

一、背景

现在谈 Monorepo 或许有些晚了,作为历史可以追溯到 2000 年初的技术思想,它已经经过多次的迭代优化,衍生出了很多优秀的框架和工具。不过对于前端在近几年工程的日益复杂化,Monorepo 在前端领域或许可以降低一定的项目复杂度。


二、什么是 Monorepo ?

Monorepo 最早的出处是软件开发策略的一个分支,”mono” 表示单一 “repo” 是”repository”的缩写,意为多个项目共用一个代码库来管理依赖关系,同一套配置文件,统一构建部署流程等等。

不仅仅是代码托管

如果项目之间没有定义明确的关系,仅仅是用同一个 git 仓库的话,并不能称之为 Monorepo 并且这样明显弊大于利。

如果有明确的依赖关系,但是关系冗余,并没有复用抽象,其实也不算真正意义上的 Monorepo。

三、为什么需要 Monorepo?

我们把现在最普遍的 Polyrepo 拿出来比较一下:

Polyrepo

Polyrepo 是当前开发应用程序的标准方式:每个团队的应用程序或项目都有一个单独的 repo。每个 repo 都有一个构建脚本配置和部署流程。

Polyrepo 流行的一个重要原因是有很好的天然隔离机制,项目自身不依赖其他任何团队的项目,开发团队可以自己决定使用那些框架,依赖库的版本,代码风格的配置,构建的自定义配置。

但过多的自由性和项目隔离也带来了很多协作和管理的问题。


•繁琐的代码共享

要跨代码库共享代码的话,可能要为共享代码创建一个代码库。然后设置工具和 CI 环境,并设置包发布,以便其他存储库可以依赖它。与此同时,还要有代码更新版本,同时要维护其他项目依赖更新的心智负担。

•代码重复

在维护多个项目的时候,有一些逻辑很有可能会被多次用到,比如一些基础的组件、工具函数,或者一些配置,这些代码如果单单复制过来,之后这些代码出现 bug、或者需要做一些调整的时候,就得修改多份,维护成本越来越高。

•不统一的代码风格和配置文件

每个项目都使用自己的一组命令来运行测试、构建、服务、linting、部署等。不一致会产生需要记忆在不同项目之间使用哪些命令的心理开销。

代码风格的不一致,也会大大的降低可读性,以及不同开发人员在格式化时造成没必要的修改。

•黑洞级别的 node_modules

多个代码库会导致重复依赖的安装文件分布在每个代码库的 node_modules 中。

Monorepo

monorepo 如何帮助解决所有这些问题?

•更好的代码复用

所有项目代码集中于单一仓库,易于抽离出共用的业务组件或工具。由于所有的项目放在一个仓库当中,复用起来非常方便,如果有依赖的代码变动,那么用到这个依赖的项目当中会立马感知到。并且所有的项目都是使用最新的代码,不会产生其它项目版本更新不及时的情况。

•工作流的一致性

复用已有的方式来构建和测试使用不同工具和技术编写的应用程序。只需要很少的人来维护所有项目的基建,维护成本也大大减低。不同开发人员可以自信地为其他团队的应用程序提交代码。

•依赖关系清晰

对于内部依赖有很清晰的引用路径,改动即时更新,不会有代码不同步的情况。改一处,所有依赖同步更新。


四、Monorepo 配合工具还可以做到什么?

Monorepos 有很多优势,但要让它们发挥作用,需要拥有正确的工具。随着工作空间的扩大,这些工具必须帮助您保持快速、易于理解和易于管理。

•增量构建

如果我们的项目过大,构建多个子包会造成时间和性能的浪费,基于 turborepo 的 Monorepo 的缓存机制 可以帮助我们记住构建内容 并且跳过已经计算过的内容,优化打包效率。

•代码生成

大部分 Monorepo 工具都提供模板代码的自动生成,降低新增 workspace 的心智负担,并统一配置,不用担心不一致的问题。

•项目结构更加清晰可见

nx 提供清晰的依赖关系可视化。

五、Monorepo 不同 solution 的比较

来源于 nrwl 整理的各个 Monorepo 工具的统计数据。

六、关于 Monorepo 的更多资源

资源 1

https://github.com/korfuri/awesome-monorepo


资源 2

https://opensource.google/documentation/reference/thirdparty/oneversion?utm_source=monorepo.tools


资源 3

https://dev.to/agentender/build-monorepos-not-monoliths-4gbc?utm_source=monorepo.tools


关于领创集团(Advance Intelligence Group)

领创集团成立于 2016 年,致力于通过科技创新的本地化应用,改造和重塑金融和零售行业,以多元化的业务布局打造一个服务于消费者、企业和商户的生态圈。集团旗下包含企业业务和消费者业务两大板块,企业业务包含 ADVANCE.AI 和 Ginee,分别为银行、金融、金融科技、零售和电商行业客户提供基于 AI 技术的数字身份验证、风险管理产品和全渠道电商服务解决方案;消费者业务 Atome Financial 包括亚洲领先的先享后付平台 Atome 和数字金融服务。2021 年 9 月,领创集团宣布完成超 4 亿美元 D 轮融资,融资完成后领创集团估值已超 20 亿美元,成为新加坡最大的独立科技创业公司之一。


往期回顾 BREAK AWAY

Spring data JPA 实践和原理浅析

如何解决海量数据更新场景下的 Mysql 死锁问题

企业级 APIs 安全实践指南 (建议初中级工程师收藏)

Cypress UI 自动化测试框架

serverless让我们的运维更轻松


发布于: 刚刚阅读数: 3
用户头像

智慧领创美好生活 2021.08.12 加入

AI技术驱动的科技集团,致力于以技术赋能为核心,通过科技创新的本地化应用,改造和重塑金融和零售行业,以多元化的业务布局打造一个服务于消费者、企业和商户的生态圈,带来个性化、陪伴式的产品服务和优质体验。

评论

发布
暂无评论
Monorepo 能给前端工程带来什么_SPA_领创集团Advance Intelligence Group_InfoQ写作社区