前端工程化详解——理解与实践前端工程化

article/2024/12/24 3:16:23

前言:
前端工程化一直是一个老生常谈的问题,不管是面试还是我们在公司做基建都会经常提到前端工程化,那么为什么经常会说到前端工程化,并没有听过后端工程化、Java工程化或者Python工程化呢?我们理解的前端工程化是不是一直都是Webpack的性能调优,或者是一个cli工具呢?今天我们带着问题来一起寻找一下答案吧!

文章目录

    • 一、前端工程化简介
      • 1. 前端发展历史
    • 二、工程化整体流程
    • 三、相关面试题
        • 1. 一个新项目由你来做技术选型,你会从那几个方面来考虑?
        • 2. 前端项目应该如何部署上线
            • a. 集成
            • b. 发布
    • 四、大厂工程化实践及开源方案
    • 五、迷你工程化脚手架实践

一、前端工程化简介

我们整天再说前端工程化,那我我们思考一下,为什么会有前端工程化这个
概念?我们来一起回顾前端的发展历史,通过这个发展历史我们就能知道为什么会有【前端工程化】这个概念。

1. 前端发展历史

看下面流程图我们可以看出来
第一阶段:前端最早期的只是HTML、CSS、JS(此时只是前端发展的一个雏形,【JS】还没有模块化的概念),随着页面发展我们发现一个页面引入太多JS脚本,将大大增加维护成本;
第二阶段:已经出现了模块的概念,会按照模块的概念进行拆分,我们如何拆分模块,如何放置这些模块?此时已经有了一个工程化的概念;
第三个阶段:模块已经划分出来,但是我们部署的时候还是想合并在一起,就涉及到了早起的打包处理;
第四个阶段:前端进一步复杂之后,前端需要承载的功能更多了,逐步开始进行前后端分离,前端也可以独立的开发了。此时前端也出来了一些新的概念,比如说:SPA、Angular、Vue等。此时就要开始考虑路由如何规划?开发时如何调试?开发完如何构建?构建完如何发布?这一切的东西才构成了【前端工程化的概念】;

HTML
CSS
JS
AMD:异步模块加载
CMD:同步模块加载
Commonjs:09年Node.js
ES-Model:15年ES6的出现
Grunt
gulp
jade
前后端分离

综上所述我们可以看出来,前端工程化绝不只是webpack或babel构建这一块,前端工程化是一个整体,从前端开始写代码 --> 如何构建 --> 如何发布测试 --> 如何上线 --> 上线后的应用状态如何监控等这一套的流程我们把他叫做【前端工程化】

二、工程化整体流程

**下图所示,就是我们从零开始整个前端工程化的考虑范围**
1. 从创建项目与开发阶段--> 我们要使用脚手架,对应的Eslint规范以及我们要使用什么UI组件库
2. CI --> 持续集成: 在一个集中的环境去构建我们的项目(避免不同协作人员环境不同带来的Bug)
3. CD --> 持续部署
下面面试题 【前端项目应该如何部署上线】 会对 CI/CD做详细的介绍
创建项目
开发
构建
测试
上线
脚手架
规范 + Eslint
组件库
CI:持续构建
CD:持续部署
监控

为什么开篇说到后端没有工程化的概念?
我们比如Java语言,他天生就是一种企业级的开发语言,他已经把上述流程包括在里面,不需要自己在去做这些基础建设;而JS是一门脚本语言,在不断开发不断迭代的进展中演变出了前端工程化的这个概念。

三、相关面试题

1. 一个新项目由你来做技术选型,你会从那几个方面来考虑?

第二个大话题,【工程化整体流程 】都是我们需要考虑的

2. 前端项目应该如何部署上线

老规矩,先看图,下图是正常的前端发布流程

下面的流程大家觉得有什么问题吗?
很多公司都是这样的一个流程,我们要知道服务器是做什么的?服务器应该是运行一些动态的程序,比如我们的Java代码,NodeJs代码,他是动态去处理数据,处理我们客户端的请求的。但是我们打包构建好的JS是一个文件,我们把一个静态文件放置一台服务器是不是就会很浪费成本,所以下图的流程一般是后端的部署流程

开发代码
git push--触发webHook
集成
Jenkins:Docker
构建代码
发布
服务器
Nginx

前端部署一般会加上CDN(内容分发网络)
为什么要加CDN,第一优化加载速度(网络时延导致的速度过慢),第二把不需要动态处理的文件(JS/CSS/Image/Video)放在CDN节省服务器资源。

最后两个步骤,主要是快速回滚,假如我们发布到线上的代码出现了问题,再重头集成,大概需要十分钟,而这十分钟客户一直看到的是有问题的页面!
每次 HTML 加载的时候我们会先去读取版本,然后拿到对应版本的JS/CSS,这样的话所有的CSS和JS都是有对应版本的,一旦发现问题直接通过HTML 加载上一次的版本即可。

开发代码
git push--触发webHook
集成
Jenkins:Docker
构建代码
HTML
JS + CSS =>CDN
Version
a. 集成

这里详细解释一下为什么要在集成的环境(也叫云构建)去进行 npm run build ?
为什么不在本地环境进行构建,要在集成的环境构建,这里核心的问题就是,没有办法保证每个人的环境(比如:npm版本、node版本)是一样的,假设不环境不一样的话,构建出来的产物就会有差异,发布上线以后出现问题很难排查。

b. 发布

前端的代码应该是运行在哪里? 运行在一台物理服务器或者云服务器上

四、大厂工程化实践及开源方案

  1. 蚂蚁金服开源的 UmiJS;
    它提前预定好很多功能,我们可以做到开箱即用,其实 UmiJS 已经是前端工程化一个很好的范例与实践(包含基础配置比如路由、mock、构建(Webpack)、部署)。
    在这里插入图片描述

  2. 阿里开源的 飞冰
    它和 UmiJS 一样也是基于React去设计的,飞冰比 UmiJS 内置的功能要更多一点,比如:数据请求、状态管理、日志打印、菜单配置等等。
    在这里插入图片描述
    在这里插入图片描述

  3. 字节跳动开源的 MODERN.js
    MODERN 会比飞冰与UmiJS包含的内容更多一些,它是按照业务场景把功能做了一个更细致的分类,比如:正常网站、中后台、桌面应用、微前端等等,主要的是支持Vue
    在这里插入图片描述

五、迷你工程化脚手架实践

时间有限稍后给大家补上,抱歉抱歉!!!

http://chatgpt.dhexx.cn/article/9vcAsnjv.shtml

相关文章

适合我的前端学习路线(学习前端不迷路)

适合我的前端学习路线(学习前端不迷路) 小伙伴们想学习前端,但是却不知如何入手,上网查前端学习路线,第一页往往充斥着各种培训公司的广告,又或者是搜前端学习路线图时,出现大量的路线图导致你还…

前端工程师行业现状怎么样?前景如何?

前端工程师行业现状怎么样?前景如何?前端即网站前台部分,运行在PC端移动端等浏览器上展现给用户浏览的网页。前端市场远没有饱和,现在的市场状况需求量非常多薪资可观。小编将通过官方数据宏观的给大家分析一下前端这个行业。 一…

快毕业了,很多人都不推荐做前端,前端业内最真实情况是什么样的?

偶尔出现这样一种说法,前端热度已经降低了,前端市场已经饱和了,前端工作没有那么好找了。 部分事实确实如此,大概是在2014-2018年,那时候前端技术刚刚崛起,相对来讲工作较现在更容易找到。 随着前端技术的发展及人才需求结构的成熟,现在已经不是会做动态网页就能找到工…

传智教育|一文读懂什么是前端?未来前景怎么样?(附前端学习路线图)

互联网高薪岗位众多,之前被大家津津乐道的后端工程师似乎慢慢不吃香了,原因是:过于内卷。 而为了打破目前内卷的局面,很多小伙伴在转行的时候就开始考虑起了前端工程师,这个岗位相比起后端的学习来说,难度…

我适不适合学前端?看完老程序员的这篇文章给你答案

什么是前端?什么又是后端呢? 1,在你机子上(PC端/手机端)看到的界面,安装的程序。给用户看的、操作的就是前端。你看不到的,帮你保存网络游戏数据,保存应用数据,处理数据的就是后端(服务端)。 2, 目前一般来说,前端指的就是浏览器端,后端指的就是直接为浏览器端…

关于根轨迹对于控制系统的一点理解

自动控制理论根轨迹的学习过程中,经常会遇到几个问题: 为什么要用根轨迹法?为什么根轨迹法最终转化为调整增益K来反应系统的稳定性和动态性能?为什么根轨迹法用开环传递函数求解的却是闭环极点? 盲目的借助于matlab进…

4.4 绘制根轨迹的MATLAB函数

4.4.1 rlocus ⒈.功能:绘制系统的根轨迹。 ⒉.格式: [r,k]rlocus(n,d) [r,k]rlocus(g) [r,k]rlocus(n,d,k) [r,k]rlocus(g,k) ⒊.说明: rlocus 函数可计算出或画出SISO系统的根轨迹,其中g(或n,d)为对象模型,输入变量…

自动控制原理复习——线性系统的根轨迹法

我们知道线性系统的性能与闭环函数的极点分布有很大关系,当闭环函数的极点全部位于s左平面时,系统是稳定的,当闭环函数的极点都是实数且无零点的情况下,系统单位阶跃响应曲线是单调的,当闭环函数的极点是共轭复数根时&…

利用根轨迹法进行控制系统的分析和设计

文章目录 1 根轨迹法基础知识什么是根轨迹根轨迹有什么用什么是根轨迹法 2 根轨迹图幅值和幅角条件手绘根轨迹图经验和特性 3 用MATLAB绘制根轨迹画一个简单的根轨迹图指定K的取值范围绘制根轨迹绘制极网格根轨迹法的分析条件稳定系统非最小相位系统求任意根轨迹点上的增益K值 …

【自动控制原理】 根轨迹法之根轨迹法分析系统性能

一、稳定性能 根轨迹法的核心思路是:通过研究系统特征方程的根随着传递函数中某一参数从0到∞变化时而变化形成的轨线。 闭环系统稳定性的充分必要条件:系统所有特征根均具有负实部。 表现在根轨迹中,就是所有的根取值均不进入右半平面。 …

Chapter8.3:控制系统校正的根轨迹法

该系列博客主要讲述Matlab软件在自动控制方面的应用,如无自动控制理论基础,请先学习自动控制系列博文,该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接:https://blog.csdn.net/qq_39032096/category_10287468…

Chapter4.1:根轨迹法

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选,仅包含部分经典习题,需要完整版习题答案请自行查找,本系列属于知识点巩固部分,搭配如下几个系列进行学习,可用于期末考试和考研复习。 自动控制原理(…

根轨迹法学习

根轨迹法:随着低频环路增益的变化,追踪闭环传递函数的极点和零点在复平面上的变化趋势。 其中相角条件是决定根轨迹的充要条件,s平面上一点若满足相角条件,则一定在根轨迹上,幅值条件为必要条件。 再通过幅值方程求出…

(自控原理)线性系统的根轨迹法

目录 一、根轨迹法的基本概念 1、根轨迹概念 2、根轨迹方程 二、根轨迹绘制的基本法则 1、绘制根轨迹基本法则 三、系统性能的分析 1、闭环零点与时间响应 一、根轨迹法的基本概念 1、根轨迹概念 三大分析矫正方法:时域法、复域法(根轨迹法)、频域法 2、根…

Chapter4.1:线性系统的根轨迹法

本系列属于胡寿松《自动控制原理》(第七版)教材的课后习题精选,需要完整版课后习题答案的同学,请自行查找,本系列基本包含了自动控制原理的知识点,搭配胡寿松《自动控制原理》(第七版)知识点提炼使用,可用于期末考试甚至考研复习。 《自动控制原理》(第七版)知识点提炼 第…

Chapter4.3:根轨迹法

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选,仅包含部分经典习题,需要完整版习题答案请自行查找,本系列属于知识点巩固部分,搭配如下几个系列进行学习,可用于期末考试和考研复习。 自动控制原理(…

Chapter4.2:根轨迹法

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选,仅包含部分经典习题,需要完整版习题答案请自行查找,本系列属于知识点巩固部分,搭配如下几个系列进行学习,可用于期末考试和考研复习。 自动控制原理(…

Chapter4.1:根轨迹法基本概念

参考书籍:《自动控制原理》(第七版).胡寿松主编. 《自动控制原理PDF版下载》 1.根轨迹基础 根轨迹简称根迹,是开环系统从某一参数从零变到无穷时,闭环系统特征方程式的根在 s s s平面上变化的轨迹; 实际系统说明: 设控…