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

news2024/11/20 8:29:17

前言:
前端工程化一直是一个老生常谈的问题,不管是面试还是我们在公司做基建都会经常提到前端工程化,那么为什么经常会说到前端工程化,并没有听过后端工程化、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://www.coloradmin.cn/o/408956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniappvideo避坑指南(H5、小程序、app)

今天写下这篇文章已是蓄谋已久了,背景是年初接到项目需求开发基于H5运行的视频学习平台,以及后来uniapp转小程序app开发。相信开发过uniapp的video应该或多或少都遇到过一些坑,开场就不多说了,直接上干货。 项目要求用户不得拖动…

vue3引入router

1.添加vue-router依赖 进入项目路径的cmd下,执行命令 npm install vue-router4 或者yarn add vue-router4 推荐使用yarn命令,比npm安装更快 2.执行npm install重新加载依赖 3.在src文件夹下创建一个router文件夹 4.在router文件夹下创建index.js文件&…

JavaScript核心技术之JSON详解

JSON是什么? JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用…

undetected_chromedriver的使用

undetected_chromedriver是专门针对浏览器识别做出来的拓展 直接使用undetected_chromedriver第三方库 if __name__ __main__:from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom sel…

前端数据加密的几种方式

1.base64加密方式 1.1 base64是什么? Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号""、"/"一共64个字符的字符集,(另加一个“”,实际是65个字符,至…

Access-Control-Allow-Origin跨域解决及详细介绍

首先,跨域不是问题。是一种安全机制。 这是你在开发时、上线前就必须提前考虑到的安全问题并且采取合适的手段去避免这个问题带来的程序错误。不过通常情况下,前端开发的小伙伴们都非常坚信后端小伙伴的接口一定已经处理好了跨域这个需求。然而事实上许多…

JavaWeb 项目 --- 表白墙 和 在线相册

文章目录一. 案例: 表白墙 (使用模板引擎)1. 首先创建 maven 项目2. 创建好模板文件3. 使用数据库存储数据.创建一个类用于数据库连接4. 使用 监视器 来初始化 Thymeleaf5. 编写 Servlet 代码① 重写 doGet 方法② 重写 doPost 方法③ 实现 load 方法④ 实现 save 方法6. 注意事…

Vue中key的作用及原理

1. 先说结论 key在Vue是DOM对象的标识;进行列表展示时,默认key是index;如果数据只做展示使用,使用index作为key是没有任何问题的;如果使用index作为key,而后续操作会破坏顺序,一定会带来效率问…

vue3 antd table表格样式修改——使用rowClassName更改某行数据的样式

vue3 antd项目实战——修改ant design vue组件中table表格的默认样式(二)知识调用场景复现修改table表格的行样式一、rowClassName添加行样式二、表格的不可控操作写在最后知识调用 文章中可能会用到的知识链接vue3ant design vuets实战【ant-design-vu…

解决:在 VSCode 中如何设置默认的浏览器为Chrome或Firefox

1、问题描述: 在 VSCode 编辑器中,其一般默认打开的浏览器是 IE 浏览器,而我已经习惯使用 Chrome 浏览器,以及会遇到页面的调试等不同的问题,因此需要将 VSCode 的默认浏览器调整为 Chrome 浏览器; 2、操…

【web前端开发】超详细讲解CSS盒子模型

文章目录1.盒子模型介绍2.内容3.边框4.内边距5.⭐盒子大小计算6.⭐内减模式7.外边距外边距的合并外边距的塌陷行内元素的垂直外边距8.⭐清除默认样式9.⭐版心居中1.盒子模型介绍 所有HTML元素可以看作盒子,CSS盒模型本质上是一个盒子,封装周围的HTML元素&#xff0c…

使用Vue来完成项目中的首页导航+左侧菜单

目录 1. 准备工作 2. 动态树 2.1 在配置请求路径 2.2 使用动态数据构建导航菜单 2.2.1 通过接口获取数据 2.2.3 通过后台获取的数据构建菜单导航 2.3 点击菜单实现路由跳转 2.3.1 创建书本管理组件 2.3.2 配置路由 2.3.3 修改LeftAside组件 2.3.4 修改Main组件 3. …

8个不能错过的程序员必备网站,惊艳到我了!!!

程序员是一个需要不断学习的职业,不少朋友每天来逛CSDN、掘金等网站,但一直都抱着“收藏从未停止,学习从未开始”的态度,别骗自己了兄弟。在编程体系中,有很多不错的小工具,可以极大得提升我们的开发效率。…

前端技术:解决执行npm install提示 xxx packages are looking for funding run `npm fund` for details的问题 详述npm fund

目录复现问题分析问题npm fund的命令npm fund的由来npm fund与npm ls解决问题参看文献😐 我的博客,不仅帮你解决此类问题,还会告诉如何去分析定位问题。 复现问题 今天执行如下命令时: npm install报出如下问题: 2…

cookie、localStorage和sessionStorage详解

目录 一、cookie 二、Web storage 1、localStorage 2、sessionStorage的使用 3、复杂数据类型储存 Web Storage带来的好处: 三、sessionStorage、localStorage和cookie的区别 一、cookie cookie是客户端与服务器端进行会话使用的一个能够在浏览器本地化存储…

vue引入elementUi后打开页面报错Uncaught TypeError: Cannot read properties of undefined(reading ‘prototype‘)

vue引入elementUi后打开页面报错 本人在用idea创建vue项目并引入elemenUi之后网页报错: Uncaught TypeError: Cannot read properties of undefined(reading ‘prototype’)。 百度了很多办法都说是因为在vue3中引入了elementUi,vue3.0之后是不支持el…

基于Java+Springmvc+vue+element员工信息管理系统详细设计

博主介绍:✌公司项目主程、全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ 🍅文末获取源码联系🍅 🍅…

React中实现插槽效果的方案

文章目录React实现插槽children实现插槽props实现插槽React实现插槽 在开发中,我们抽取了一个组件,但是为了让这个组件具备更强的通用性,我们不能将组件中的内容限制为固定的div、span等等这些元素。 我们应该让使用者可以决定某一块区域到…

项目部署,一点也不难!

目录 一、部署前准备 (一)前端多环境准备 (二)后端多环境准备 二、项目部署 (一)原始部署 1、前端部署 2、前端部署测试 3、后端部署 (二)宝塔 Linux 部署 1、前端部署 2…

前端面试八股文--Vue篇(持续更新)

一. Vue2 篇 1.MVC MVVM区别 首先呢这是两种模式 MVC指的是 modal,view, controller MVVM 指的是 modal ,view, view modal mvc和mvvm区别是:1、处理业务的模式不同,MVC里,View是可以直接访…