前端工程化概述

前端工程化实战 - 工程化概述 前端工程化实战 - 工程化概述1.1 工程化的定义和主要解决的问题1.2 一个项目过程中工程化的表现1.3工程化不等于工具1.4 工程化与Node.js 1.1 工程化的定义和主要解决的问题 前端工程化是指遵循一定的标准和规范,通过工具提高效率降低成本的一种手段。近些年之所以被广泛的关注和探讨是由于前端应用的功能要求不断提高,业务逻辑日益复杂。 从传统的网站到现在的H5、移动APP、桌面应用,以及小程序,前端技术几乎是无所不能的全面覆盖。在这些表象的背后实际上是前端行业对我们开发人员的要求发生了天翻地覆的变 阅读详情

软件工程定义:将工程方法系统化地应用到软件开发中

前端发展历史

前端工程化的发展历史可以追溯到互联网的早期阶段,随着前端技术的不断演进和互联网应用的复杂化,前端工程化也逐渐成为了前端开发的重要领域。以下是前端工程化的主要发展里程碑:

  1. 1995年,Brendan Eich发明Javascript
  2. 2005年,Ajax(Asynchronous Javascript And XML)广泛应用
  3. 2008年,V8引擎发布,意味着js可以脱离浏览器使用
  4. 2009年,Node.js发布,标志了前端工程化进入飞跃的时代
  5. 2010年,Npm 0.1版本发布标志的模块化的时代到来
  6. 2013年,Webpack 1.0版本发布,标志着现在前端开发模式正式形成。
  7. 2013年,React 1.0版本发布
  8. 2014年,Vue1.0版本发布,标志着前端MVVM时代到来

前端开发模式进化过程

前端开发模式经历了多个阶段的演进,以下是前端开发模式的主要进化过程:

  1. 前后端混合(1995~2005):服务端渲染,javascript仅实现交互
  2. 前后端分离(2005~2013):借助ajax实现前后端分离、SPA等新模式
  3. 模块化开发(2013~2014):npm管理模块、Webpack编译打包资源
  4. 模块化+MVVM(2014~至今):基于React或Vue开发,不再开发html,开发html成为历史

开发过程中的问题

早先,我们在开发过程中难免会遇到一些问题:

  • 想要使用ES6+特性,但是兼容性有问题
  • 想要使用Less/Sass/PostCSS增强CSS的编程性,但是运行环境不能直接支持
  • 想要使用模块化的方式提高项目的维护性,但运行环境不能支持
  • 除了上面支持的工作以外,我们在开发过程中也有重复性的工作,例如部署上线前需要手动压缩代码及资源文件,部署过程需要手动上传代码到服务器。手动会出现各种各样的工作。
  • 多人协作开发,无法硬性统一大家的代码风格,从仓库中pull回来的代码质量无法保证,拉回来的代码运行崩溃。
  • 除了编码问题,在开发部分功能时,需要等待后端服务接口提前完成

以上问题可以看出工程化主要解决的问题主要分为:传统语言或语法的弊端,无法使用模块化、组件化,重复性的机械式工作,代码风格统一、质量保证,依赖后端服务接口支持,整体依赖后端项目。

工程化介绍

前端工程化是使用软件工程的技术和方法来进行前端的开发流程、技术、工具、经验等规范化、标准化,其主要目的为了提高效率和降低成本,即提高开发过程中的开发效率,减少不必要的重复工作时间,而前端工程本质上是软件工程的一种,前端工程是指将工程方法系统化地应用到前端开发中,以系统、严谨、可量化的方法开发、运营、维护前端应用程序,目的是降本提效。

在实际开发的过程中,一个完整的迭代周期需要依次经过开发、测试、部署、发布这几个环节,并且在产品上线之后,我们还需要对产品进行稳定性保障也就是实时的监控和报警系统,避免产品宕机。那么,工程化需要解决的问题就是如何在整个的迭代周期中降本提效。

47.png

工程化的表现是一切以提高效率、降低成本、质量保证为目的的手段都属于工程化,一切重复的工作都应自动化。我们从项目的创建、编码、预览、提交、部署这几个环节中,每一个环节都可以用工程化的方式去提高效率。

  • 创建项目:使用脚手架工具自动完成基础结构的搭建
  • 编码:借助工程化的工具自动的完成代码的格式化以及风格的校验,从而确保所有开发人员代码风格一致,借助编译工具去使用新的特性提高编码效率
  • 预览:可以借助Web服务能运行应用,同时提供热更新、SourceMap定位问题、Mock接口的功能
  • 提交:在提交代码之前使用Git Hooks和Lint-staged完成项目代码的检查,确保不会把有问题的代码提交到仓库中。
  • 部署:可以使用脚手架命令完成项目的上传,从而替代传统的ftp上传方式。还可以实现在代码提交过后自动化的通过持续集成和持续部署的方式,自动将代码部署到服务器中。

工程化不是某个工具,例如webpack功能很强大,但是它并不是工程化。工程化的核心是对项目整体的规划、架构,而工具只是帮助我们落实工程化的工具和手段。

那么我们应该去选用那些工具来搭配完成工程化的规划呢?我们可以参考create-react-app、vue-cli、angular-cli、gatsby-cli等官方脚手架,它不是一个工具,而是一个成熟的工程化集成方案。以vue-cli为例,创建Vue项目的同时,vue-cli提供了模板选择、编译以及本地开发服务器等功能模块。对于使用vue-cli创建的Vue项目,业务开发人员无须操心复杂的webpack配置,只需关注业务逻辑开发本身,这很大程度上降低了开发的时间成本。

工程化特性

前端工程化可以分成四大特性来说,分别为:

  1. 模块化:将一个文件拆分成多个相互依赖的文件,最后进行统一的打包和加载,这样能够很好的保证高效的多人协作。其中包含

    • JS 模块化:CommonJS、AMD、CMD 以及 ES6 Module。
    • CSS 模块化:Sass、Less、Stylus、BEM、CSS Modules 等。其中预处理器和 BEM 都会有的一个问题就是样式覆盖。而 CSS Modules 则是通过 JS 来管理依赖,最大化的结合了 JS 模块化和 CSS 生态,比如 Vue 中的 style scoped。
    • 资源模块化:任何资源都能以模块的形式进行加载,目前大部分项目中的文件、CSS、图片等都能直接通过 JS 做统一的依赖关系处理。
  2. 组件化:不同于模块化,模块化是对文件、对代码和资源拆分,而组件化则是对 UI 层面的拆分。

    • 通常,我们会需要对页面进行拆分,将其拆分成一个一个的零件,然后分别去实现这一个个零件,最后再进行组装。
    • 在我们的实际业务开发中,对于组件的拆分我们需要做不同程度的考量,其中主要包括细粒度和通用性这两块的考虑。
    • 对于业务组件,你更多需要考量的是针对你负责业务线的一个适用度,即你设计的业务组件是否成为你当前业务的 “通用” 组件。
  3. 规范化:正所谓无规矩不成方圆,一些好的规范则能很好的帮助我们对项目进行良好的开发管理。规范化指的是我们在工程开发初期以及开发期间制定的系列规范,其中又包含了:

    • 项目目录结构
    • 文档规范化
    • 接口规范化
    • 编码规范:对于编码这块的约束,一般我们都会采用一些强制措施,比如 ESLint、StyleLint 等。
    • 联调规范
    • 文件命名规范
    • 样式管理规范:目前流行的样式管理有 BEM、Sass、Less、Stylus、CSS Modules 等方式。
    • git flow 工作流:其中包含分支命名规范、代码合并规范等。
    • 定期 code review
    • … 等等
  4. 自动化:从最早先的 grunt、gulp 等,再到目前的 webpack、parcel。这些自动化工具在自动化合并、构建、打包都能为我们节省很多工作。而这些前端自动化其中的一部分,前端自动化还包含了持续集成、自动化测试等方方面面。

前端工程化的3个阶段

  1. 本地工具链

前端工程化的初级阶段便是将各类工具的功能进行整合,为业务开发人员提供统一规范的工具栈。我们不妨将此阶段的前端工程化称为本地工具链形态。此形态下的所有工程化功能模块,包括构建、本地服务器、部署等,均在本地环境下工作。

本地工具链形态的工程化方案解决的问题,降低了业务开发人员学习、使用工具的成本。这个方案将复杂的功能需求全部交给工具链内部解决,工具链的统一,另一个好处是巩固了流程的规范性,开发者使用统一的工具链、遵循统一的规范进行业务代码的编写,利于多人协作与程序的维护。

  1. 管理平台

本地工具链形态的工程化虽然解决了前端开发以及前后端协作开发中的部分痛点问题,但由于所有的功能模块均在本地环境工作,因此必然会受到环境差异性的影响,比如操作系统类型、版本、内核等。这些因素会在一定程度上影响构建产出代码的一致性。为此前端工程化进化到下一进化形态:集中管理的云平台。

管理平台形态的工程化做到了以下几点。

  • 淡化环境差异性,保证构建产出的一致性。
  • 权限集中管理,提高安全性。
  • 项目版本集中管理,便于危机处理,比如版本回滚等。

管理平台形态将各个功能模块的执行环境集中化,从各模块实现角度来讲与本地工具链基本一致。

  1. 持续集成

即使进化到管理平台形态,前端工程化方案所解决问题的本质仍然只是将前端工程师与服务器端工程师的工作解耦。这虽然提高了两方的工作效率,但其各自的工作流却是孤立的。前端有了构建和部署,后端也有了相应的阶段,两方的工作流是分离的,最终的融合工作仍然难以避免烦琐的人工操作。所以前端工程化最终的完美形态,必然与整体工作流结合,作为持续集成方案中的一环。

企业的应用场景

  • 前端工程化贯穿整个研发流程,解决研发流程中的问题
  • 工程化的核心目标是三点:效率、规范、性能
  • 只有了解前端研发流程的痛点,才能进行诊断和优化
  • 需要站在研发场景的角度去思考研发流程痛点

企业前端项目面临的真实问题

  • 项目量级增加:由几千行代码升级到几万行代码
  • 项目数量扩大:由几个项目扩大到几千个项目
  • 项目复杂度高:由Web项目扩展到H5/PC/小程序/Node服务端/脚手架
  • 团队人数增加:由几个前端扩展到几百个前端

企业前端工程问题解法

  • 项目量级增加:通过采用模块化(CommonJS和ESM)的方式来将js拆分成一个一个的功能,达到多个项目复用,通过npm和webpack辅助实现。
  • 项目数量扩大:在大厂中有几千个项目,需要通过研发平台和前端研发脚手架来创建、管理项目。
  • 项目复杂度高:在大厂中不同的团队会用到vue、react、小程序等技术栈来开发,团队可能针对不同的技术栈开发不同的脚手架,导致重复造轮子,这样我们要通过工程脚手架(统一解决不同技术栈的工程差异)来解决,不管是vue或是react项目,在工程构建流程方面是统一的。
  • 团队人数增长:通过研发平台和研发脚手架来帮助团队开发人员进行协同工作。

企业前端工程化的应用场景

  • 工程脚手架:使用工程脚手架达到vue、react等工程的统一构建
  • 研发脚手架:解决对项目的创建、发布以及管理项目
  • 项目性能优化:对于项目的构建速度进行优化

相关文章

看完觉得对您有所帮助别忘记关注呦

weixin.jpeg

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程 目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa 阅读详情

相关推荐

别再手动画柜子了!用EPLAN导入STEP模型,5分钟搞定一个标准机柜

本文详细介绍了如何利用EPLAN Pro Panel的3D布局功能,快速将STEP模型转化为智能机柜宏,大幅提升电气工程设计效率。通过实战步骤解析,包括模型导入、智能解析、安装面定义及拼柜技巧,帮助工程师5分钟内完成标准机柜设计,避免传统手动建模的尺寸偏差问题。

weixin_26875109的博客 431

01-前端工程化概述

前端工程化概述

m0_48670609的博客 583

自动换挡频率计的设计精髓:如何用数字电路优雅地解决量程切换难题

本文深入解析了自动换挡频率计的设计精髓,重点探讨如何利用数字电路优雅解决量程切换难题。通过74系列通用数字集成电路构建智能化的自动量程切换系统,详细介绍了状态检测、决策逻辑和档位执行等核心模块的设计方法,并对比了不同实现方案的优劣,为电子测量领域的工程师提供了实用的硬件设计参考。

weixin_27869497的博客 407

Node—前端工程化概述

文章目录前端工程化概述简述Node.js基础Node.jsNode.js APIsNode.js使用全局对象全局函数模块内置模块consoleprocesspathfs—file systemfs实践—文件的复制和压缩文件流http自定义模块简介加载逻辑第三方模块npm概述安装--save和--save-dev脚手架工具Yeoman 前端工程化概述 简述 什么是工程? 工程化:在完成一个项目的时候所用到的技术和工具,用来提高前端开发的效率 前端工程化的萌芽: 内容: 项目上线的时候,需要进行压缩代码,更

qq_43352105的博客 726

MATLAB实战:手把手教你绘制发动机万有特性曲线(附完整代码)

本文提供了一份详细的MATLAB实战指南,手把手教你从发动机台架试验数据出发,通过数据预处理、核心插值算法和可视化技巧,绘制出专业、精确的发动机万有特性曲线图。文章深入解析了万有特性图的核心构成与工程意义,并附带了完整的模块化代码,帮助工程师和学生快速掌握这一关键技能。

weixin_29094539的博客 410

H3C VRF实验

POP-vpn-instance-RT1]route-distinguisher 11:11 # VPN实例-RT1的路由区分器值11:11。配置路由泄露,其实就是在一个VPN示例中添加另一个VPN实例的下一跳,比如在VPN实例RT1中添加去往SRV的默认路由。但是也有了一个新的问题,那就是RT1、RT2和RT3也能互访了,这让VPN实例变得没有意义了。[POP]ip vpn-instance RT1 #配置vpn实例-RT1。绑定了VPN实例,所以要把路由添加到VPN实例POP中。

m0_68698993的博客 4023

前端工程化概述(初版)

当我以“前端工程化”工程化为关键字进行查找,得到的结果都没法让我比较清晰的理解。要么没有对“前端工程化”这一名词做解释;要么把前端工程化所要做的事情当作释义。前段时间我看过孟琢老师写的《汉字就是这么来的:字里字外的动物王国》一书,他通过“拆字法”浅显易懂、条理清晰的解析了我们中国汉字的由来以及发展脉络。于是我就想,是不是也可以采用“拆字法”来解析“前端工程化”呢?当然,这里并不是要把这五个汉字进行性拆解,而是对“前端工程化”这一名词进行拆解分析。接下来开始拆解。

Jay的博客 1323

【Settings随记:二】一级菜单,二级菜单的添加与隐藏,添加辅助功能

首先会去调用父类的onCreatePreferences(Bundle savedInstanceState, String rootKey)方法,然后调用addPreferencesFromResource(R.xml.assistant_function)方法(这个方法是父类的)加载二级菜单的xml配置文件,实现创建二级菜单,这个配置文件路径在res/xml/assistant_function.xml。controller:该item的控制器,控制它的内容展示,是否可用,也可以控制它的点击事件等。

镇元子的博客 1594

前端工程化知识点-概述

本文摘要:文章系统梳理了前端开发中的关键技术与工具。模块化标准部分对比了CommonJS、ESModule等五种方案的特性与应用场景;包管理工具章节分析了npm、yarn、pnpm的差异及幻影依赖问题;工具链部分详解了CSS预处理器、Babel等核心工具;构建器章节重点比较了Webpack、Vite和Rspack的架构原理与工作流程。全文覆盖前端工程化全链路,从模块化到构建优化,为开发者提供了全面的技术选型参考。

qq_28887631的博客 665

SAPIEN ManiSkill3 入门教程(一)

请注意,table.set_pose(pose) 设置的是演员在世界帧中的坐标系姿势。移除的实体可以再次添加到场景中,但已在场景中的实体则不能再次添加。显示器可以是物理的(如显示器),也可以是虚拟的(如 VNC)。我们可以通过 get_pose()、get_linear_velocity() 和 get_angular_velocity()获取演员的运动量(姿势、线速度、角速度)。现在,让我们创建一个斜坡。例如,您可能需要一个简单的碰撞形状来进行快速模拟,但却需要一个复杂的视觉形状来进行逼真的渲染。

机器人控制与仿真应用 3070

sec_uid

webcast_uid转sec_uid,webcast_uid转uid,webcast_uid转dy号

m0_56967679的博客 4419

前端工程化(一)概述

比如目录结构的制定,合理的目录结构有助于提高项目的逻辑性和结构性,方便资源的统一管理和定位,有更好的拓展性;接口规范,这个是开发中最重要的规范,不仅涉及前端团队,也涉及后端团队,在SPA单页应用的时代,前后端分公非常清晰,协作开发的关键点就是接口;我们通常说一切皆组件,整个页面可以看成是一个大型组件,一个页面又可以按功能或者业务逻辑进一步差分成中型组件,中型组件还可以进一步拆分成小型组件,直到拆分成DOM元素为止,DOM元素可以看成浏览器的组件,也就是基础组件。怎么提高项目的开发质量?

weixin_42268042的博客 378

鸿蒙开发之hdc命令行

hdc(HarmonyOS Device Connector)是HarmonyOS为开发人员提供的用于调试的命令行工具,通过该工具可以在windows/linux/mac系统上与真实设备进行交互。

xiangzhihong8的专栏 5823

学习十、前端工程化概述

一、为什么要做前端工程化 技术是为了解决问题而存在的 1、为了使用ES6+新特性,但是兼容有问题。 2、想要使用Less,Sass,PostCSS增强CSS的编程性,但是运行环境不能支持。 3、想要使用模块化的方式提高项目的可维护性,但是运行环境不能直接支持。 4、部署上线前需要手动压缩代码及资源文件、部署过程需要手动上传代码到服务器。 5、多人协作开发,无法硬性统一大家的代码风格,从仓库PULL回来的代码质量无法保证。 6、部分功能开发...

qq_40289624的博客 128

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

前端 工程化概述

工程化的定义和主要解决的问题 把项目统一管理。 一个项目过程中工程化的表现 工程化不等于工具 工程化一个是对一个项目的整体规划和架构。 例如vue cli 不仅仅帮我们创建项目,更是明确了整个结构,例如route目录应该放哪,提供了规范化。 工程化与 Node.js ...

weixin_45345105的博客 268

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

前端工程化概述:从项目搭建到部署

核心技术主题为前端工程化,通过将软件工程方法应用于前端开发解决传统开发问题。关键方案涵盖项目搭建、代码与依赖管理、构建优化等全流程。创新点在于形成规范高效开发流程。应用于复杂前端项目,能提高开发效率、提升代码质量、降低维护成本,如 React 单页应用实践案例,还需注意避坑要点。

专注技术分享 947

前端工程化概述与脚手架工具

文章说明:本文章为拉钩大前端训练营所做笔记和心得,若有不当之处,还望各位指出与教导,谢谢 ! 一、工程化的定义和主要解决的问题 从传统的网站到现在的H5,移动app,桌面应用以及小程序,前端对开发人员的要求发生了翻天覆地的变化。 面临的问题 想要使用ES6+,但是兼容有问题(传统语言或语法的弊端) 想要使用Less/Sass/PostCSS增强CSS的编程性,但是运行环境不能直接支持(无法使用模块化/组件化) 部署上线前需要手动压缩代码及资源文件,部署过程需要手动上传代码到服务器(重...

weixin_41962912的博客 466

工程化与框架系列(1)--前端工程化概述

工程化与框架之旅第一站

欢迎来到这里,希望文章能对你有所帮助 726

前端工程化概述||模块化相关规范

前端工程化 模块化概述 浏览器端模块化规范 服务器端模块化规范 大一统的模块化规范 – ES6模块化 ① npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node ② npm install --save @babel/polyfill ...

qq_39368007的博客 243

前端工程化——模块化概述

模块化概述——「模块化」只是思想 最主流的代码整合方式,安装功能不同划分不同模块。 模块化演变过程 模块化规范 常用的模块化打包工具 基于模块化工具构建现代WEB应用 打包工具的优化技巧 模块化的演进过程 Stage 1 - 文件划分方式 完全依靠约定 ├── index.html ├── module-01.js └── module-02.js 通过scriptsrc属性引入模块 污染全局作用域,容易产生命名冲突 模块成员可以随意修改 无法管理模块依赖关系 Stage 2 - 命名空间方式

赵忠洋的博客 461

【项目推荐】基于 SpringBoot3 + Spring AI 的游泳馆管理系统:Agent + RAG + Function Calling 一次学全

它不是玩具 Demo,而是一个「业务 + AI」双主线交织的真实系统——预约业务在跑,AI 客服在旁边实时查库作答,两条线通过 Function Calling、RAG、站内消息串成一体。面试官问「你做过什么 AI 项目」时,你能从业务场景讲到架构取舍,从 RAG 切分参数讲到降级兜底——这和「我调了一下 ChatGPT 的 API」是完全不同的两个段位。项目已包含完整的建表 SQL、初始化数据、部署文档,克隆下来就能跑。获取方式:见文末说明 / 后台回复关键词获取。—— 完 ——

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 339
上一篇: webpack 从入门到放弃!
下一篇: 前端工程化之模块化
全栈大师兄
博客等级 码龄11年 448粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值