我的编程空间,编程开发者的网络收藏夹
学习永远不晚

前端工程Monorepo项目管理方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

前端工程Monorepo项目管理方式

什么是 Monorepo?

随着前端工程日益复杂,某些业务或者工具库通常涉及到很多个仓库,那么时间一长,多个仓库开发弊端日益显露,由此出现了一种新的项目管理方式——Monorepo。本文主要以 Monorepo 的概念MultiRepo的弊端Monorepo 的收益以及Monorepo 的落地这几个角度来认识和学习一下 Monorepo,文末会有思考题,欢迎大家来踊跃讨论。

Monorepo 其实不是一个新的概念,在软件工程领域,它已经有着十多年的历史了。概念上很好理解,就是把多个项目放在一个仓库里面,相对立的是传统的 MultiRepo 模式,即每个项目对应一个单独的仓库来分散管理。

现代的前端工程已经越来越离不开 Monorepo 了,无论是业务代码还是工具库,越来越多的项目已经采用 Monorepo 的方式来进行开发。Google 宁愿把所有的代码都放在一个 Monorepo 工程下面,Vue 3、Yarn、Npm7 等等知名开源项目的源码也是采用 Monorepo 的方式来进行管理的。

一般 Monorepo 的目录如下所示,在 packages 存放多个子项目,并且每个子项目都有自己的package.json:

├── packages
|   ├── pkg1
|   |   ├── package.json
|   ├── pkg2
|   |   ├── package.json
├── package.json

那 Monorepo 究竟有什么魔力,让大家如此推崇,落地如此之广呢?

MultiRepo 之痛

要想知道 Monorepo 的优势,首先得弄清楚之前的开发方式有什么痛点。

之前传统的方式MultiRepo当中,每个项目都对应单独的一个代码仓库。我之前也是用这种方式开发的,是真真切切地感受到了这种方式带来的诸多弊端。现在就和大家一一分享一下。

1.代码复用

在维护多个项目的时候,有一些逻辑很有可能会被多次用到,比如一些基础的组件、工具函数,或者一些配置,你可能会想: 要不把代码直接 copy 过来,多省事儿!但有个问题是,如果这些代码出现 bug、或者需要做一些调整的时候,就得修改多份,维护成本越来越高。

那如何来解决这个问题呢?比较好的方式是将公共的逻辑代码抽取出来,作为一个 npm 包进行发布,一旦需要改动,只需要改动一份代码,然后 publish 就行了。

但这真的就完美解决了么?我举个例子,比如你引入了 1.1.0 版本的 A 包,某个工具函数出现问题了,你需要做这些事情:

  • 去修改一个工具函数的代码
  • 发布1.1.1版本的新包
  • 项目中安装新版本的 A。

可能只是改了一行代码,需要走这么多流程。然而开发阶段是很难保证不出 bug 的,如果有个按钮需要改个样式,又需要把上面的流程重新走一遍......停下来想想,这些重复的步骤真的是必须的吗?我们只是想复用一下代码,为什么每次修改代码都这么复杂?

上述的问题其实是 MultiRepo普遍存在的问题,因为不同的仓库工作区的割裂,导致复用代码的成本很高,开发调试的流程繁琐,甚至在基础库频繁改动的情况下让人感到很抓狂,体验很差。

2.版本管理

在 MultiRepo 的开发方式下,依赖包的版本管理有时候是一个特别玄学的问题。比如说刚开始一个工具包版本是 v1.0.0,有诸多项目都依赖于这个工具包,但在某个时刻,这个工具包发了一个 break change 版本,和原来版本的 API 完全不兼容。而事实上有些项目并没有升级这个依赖,导致一些莫名的报错。

当项目多了之后,很容易出现这种依赖更新不及时的情况。这又是一个痛点。

3.项目基建

由于在 MultiRepo 当中,各个项目的工作流是割裂的,因此每个项目需要单独配置开发环境、配置 CI 流程、配置部署发布流程等等,甚至每个项目都有自己单独的一套脚手架工具。

其实,很容易发现这些项目里的很多基建的逻辑都是重复的,如果是 10 个项目,就需要维护 10 份基建的流程,逻辑重复不说,各个项目间存在构建、部署和发布的规范不能统一的情况,这样维护起来就更加麻烦了。

Monorepo 的收益

说清楚 MultiRepo 的痛点之后,相信你也大概能理解为什么要诞生Monorepo这个技术了。现在就来细致地分析一下Monorepo到底给现代的前端工程带来了哪些收益。

首先是工作流的一致性,由于所有的项目放在一个仓库当中,复用起来非常方便,如果有依赖的代码变动,那么用到这个依赖的项目当中会立马感知到。并且所有的项目都是使用最新的代码,不会产生其它项目版本更新不及时的情况。

其次是项目基建成本的降低,所有项目复用一套标准的工具和规范,无需切换开发环境,如果有新的项目接入,也可以直接复用已有的基建流程,比如 CI 流程、构建和发布流程。这样只需要很少的人来维护所有项目的基建,维护成本也大大减低。

再者,团队协作也更加容易,一方面大家都在一个仓库开发,能够方便地共享和复用代码,方便检索项目源码,另一方面,git commit 的历史记录也支持以功能为单位进行提交,之前对于某个功能的提交,需要改好几个仓库,提交多个 commit,现在只需要提交一次,简化了 commit 记录,方便协作。

Monorepo 的落地

如果你还从来没接触过 Monorepo 的开发,到这可能你会疑惑了: 刚刚说了这么多 Monorepo 的好处,可是我还是不知道怎么用啊!是直接把所有的代码全部搬到一个仓库就可以了吗?

当然不是,在实际场景来落地 Monorepo,需要一套完整的工程体系来进行支撑,因为基于 Monorepo 的项目管理,绝不是仅仅代码放到一起就可以的,还需要考虑项目间依赖分析、依赖安装、构建流程、测试流程、CI 及发布流程等诸多工程环节,同时还要考虑项目规模到达一定程度后的性能问题,比如项目构建/测试时间过长需要进行增量构建/测试按需执行 CI等等,在实现全面工程化能力的同时,也需要兼顾到性能问题。

因此,要想从零开始定制一套完善的 Monorepo 的工程化工具,是一件难度很高的事情。不过社区已经提供了一些比较成熟的方案,我们可以拿来进行定制,或者对于一些上层的方案直接拿来使用。

其中比较底层的方案比如 lerna,封装了 Monorepo 中的依赖安装、脚本批量执行等等基本的功能,但没有一套构建、测试、部署的工具链,整体 Monorepo 功能比较弱,但要用到业务项目当中,往往需要基于它进行顶层能力的封装,提供全面工程能力的支撑。

当然也有一些集成的 Monorepo 方案,比如rushstack,提供从初始化、开发、构建、测试到部署的全流程能力,有一套比较完整的 Monorepo 基础设施,适合直接拿来进行业务项目的开发。不过由于这些顶层方案内部各种流程和工具链都已经非常完善了,如果要基于这些方案来定制,适配和维护的成本过高,基本是不可行的。

总结

总而言之,Monorepo 的开发模式就是将各自独立的项目,变成一个统一的工程整体,解决 MultiRepo 下出现的各种痛点,提升研发效率和工程质量。那最后我还有有一个问题,采用 Monorepo 解决了之前的痛点之后,产生了哪些新的问题呢?这些问题可以解决吗?更多关于Monorepo前端项目管理的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

前端工程Monorepo项目管理方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

前端工程Monorepo项目管理方式是什么

这篇“前端工程Monorepo项目管理方式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“前端工程Monorepo项目管
2023-07-02

JS前端架构pnpm怎么构建Monorepo方式管理demo

今天小编给大家分享一下JS前端架构pnpm怎么构建Monorepo方式管理demo的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下
2023-07-02

web前端:前端开发与项目管理

编程学习网:所谓项目管理,就是项目的管理者,在有限的资源约束下,运用系统的观点、方法和理论,对项目涉及的全部工作进行有效地管理。即从项目的投资决策开始到项目结束的全过程进行计划、组织、指挥、协调、控制和评价,以实现项目的目标。
web前端:前端开发与项目管理
2024-04-23

工程项目管理程序

工程项目管理程序项目管理程序是指一种用于规划、执行、控制和完成特定项目或任务的程序。它是一种系统化的方法,旨在确保项目在预定的时间、成本和质量范围内得到成功完成。本文将详细介绍工程项目管理程序,包括其重要性、组成部分、实施步骤以及使用情况。项目管理程序的重要性在现代社会,工程项目管理程序已经成为许多企业和组织的必要工具
工程项目管理程序
2024-01-26

EPC工程项目管理软件优化项目管理流程

EPC工程项目管理软件是现代工程项目的必备工具,它可以帮助企业更有效地管理和控制项目进度,降低成本,提高效率。本文将详细介绍EPC工程项目管理软件的主要功能和优势,以及如何选择和使用合适的EPC工程项目管理软件。一、EPC工程项目管理软件的主要功能EPC工程项目管理软件主要包括以下几个主要功能:项目计划和控制:E
EPC工程项目管理软件优化项目管理流程
2023-12-15

工程项目管理办法

简介工程项目管理办法是指在工程项目的实施过程中,为确保工程项目的顺利进行、提高项目管理效率和质量,制定的一系列规章制度和操作流程。本文将介绍工程项目管理办法的重要性、主要内容以及实施方法。重要性工程项目管理办法对于项目的顺利进行至关重要。首先,它可以规范项目管理的各个环节,确保项目按照计划和规定的要求进行。其次,它可以
工程项目管理办法
2023-12-31

软件项目工程管理

一、引言在当今社会,软件项目已经成为企业和组织的重要组成部分。然而,软件项目的成功并不总是如此简单,特别是在工程管理方面,需要处理大量的细节和复杂性。软件项目工程管理是一种系统性的方法,旨在确保软件项目的成功实施。本文将深入探讨软件项目工程管理的概念、目标、过程以及挑战。二、软件项目工程管理的概念软件项目工程管理是指在
软件项目工程管理
2024-01-25

工程项目app管理软件提高工作效率,优化项目管理

本文将探讨一款专门用于工程项目管理的app管理软件,详细介绍其功能特点、优点和应用场景,帮助读者了解如何利用这款软件提高工作效率,优化项目管理。详细介绍随着科技的发展,工程项目管理已经越来越依赖于各种软件工具。而一款好的工程项目app管理软件不仅可以提高工作效率,还能优化项目管理,确保项目的顺利进行。接下来,我们
工程项目app管理软件提高工作效率,优化项目管理
2024-01-25

电力工程项目 管理系统

电力工程项目管理系统是一种旨在提高电力工程项目管理效率和质量的软件系统。通过这个系统,电力工程管理人员可以更方便地进行项目的规划、设计、施工、调试等各个阶段的工作,从而提高工作效率,降低项目成本。简介电力工程项目管理系统是一个集成了项目计划、设计、施工、调试等多个功能模块的软件系统。通过这个系统,电力工程管理人员可以更
电力工程项目 管理系统
2024-01-25

新页工程项目管理系统

简介新页工程项目管理系统是一款专为工程项目管理而设计的应用软件。它以创新的管理理念和高效的工作流程,为企业提供全面、可靠的工程项目管理解决方案。该系统通过数字化的方式,将传统的项目管理过程转化为在线平台,使得项目管理者能够更便捷地协调资源、监控进度和提高工作效率。详细说明1.项目计划与执行新页工程项目管理系统可以帮助企
新页工程项目管理系统
2024-01-19

明源工程项目管理软件

1.简介明源工程项目管理软件是一款专为工程项目管理而设计的应用软件,旨在帮助用户提高工作效率、优化项目流程和降低管理成本。它集合了项目管理、进度控制、资源分配、成本核算等功能,能够全面满足工程项目管理的需求。2.功能特点2.1项目管理明源工程项目管理软件提供了丰富的项目管理功能,包括项目立项、任务分配、工作日程、里程碑
明源工程项目管理软件
2024-01-19

重大工程项目管理系统

简介在现代社会,重大工程项目管理系统是一项非常重要的工具,它可以帮助项目管理人员更好地组织和管理项目的各个方面。本文将介绍重大工程项目管理系统的重要性、功能以及如何使用该系统来提升工程管理效率。功能概述重大工程项目管理系统是一种集成化的软件工具,它可以帮助项目管理人员有效地组织和管理工作流程、资源分配、成本控制、风险管
重大工程项目管理系统
2024-01-21

智慧项目工程管理系统

什么是智慧项目工程管理系统?智慧项目工程管理系统是一种基于信息技术的项目管理工具,它通过整合项目信息、资源和流程,提供全面的项目管理功能,帮助项目管理者更好地控制和监控项目进展,提高项目管理效率。为什么需要智慧项目工程管理系统?在传统的项目管理中,项目信息分散、沟通不畅、资源调配不当等问题常常导致项目的延误和成本超支。
智慧项目工程管理系统
2024-01-14

集成系统项目管理工程

简介集成系统项目管理工程是一项综合性的任务,旨在确保项目的成功完成。它涵盖了从项目规划到实施、监控和控制的全过程,包括项目需求分析、资源分配、风险评估和应对措施等。本文将探讨集成系统项目管理工程的重要性以及如何有效地实施。项目管理工程的要素1.项目需求分析项目需求分析是集成系统项目管理工程的第一步。在这个阶段,项目团队
集成系统项目管理工程
2024-01-16

系统集成项目管理工程师考前知识点集锦

  不少考生在备考软考中级系统集成项目管理工程师考试,今天编程学习网小编为大家整理了系统集成项目管理工程师考点集锦,供大家备考复习。  1. 项目的特点有哪些?  (1) 临时性:指每个项目有明确的开始和结束日期。  (2) 独特性:独特的产品服务或成果。  (3) 渐进明细:项目的成果性目标是逐步完成的。  2. 项目的
系统集成项目管理工程师考前知识点集锦
2024-04-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录