返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript前端构建工具原理的理解
  • 412
分享到

JavaScript前端构建工具原理的理解

2024-04-02 19:04:59 412人浏览 独家记忆
摘要

目录前言构建工具的前世今生YUI Tool + AntGrunt / Gulpwebpack / Rollup / ParcelVite / Esbuildjs 模块化的发展史和构建

前言

最近有幸在前端团队里面做了一次关于 WEBpack 的技术分享。在分享的准备过程中,为了能让大家更好的理解 webpack,特意对市面上以前和现在流行的构建工具做了一个梳理总结。在整理和分享的过程中,获益匪浅,对前端构建工具有了新的认识。在这里,将自己的一些思考总结写出来,希望也能给到对构建工具同样感兴趣的同学一点帮助。

本文的目录结构如下:

  • 构建工具的前世今生
  • js 模块化的发展史和构建工具的变化
  • 结束语

构建工具的前世今生

谈到构建工具,大家首先想到的肯定就是 Webpack 以及现在最?的 ViteWebpack,功能强大,生态丰富,从面世到今天,一直是很受大家欢迎;Vite 采用 unbundle 构建模式,带来了极致的开发体验,给开发人员以新的选择。

在这两个构建工具之外,还有其他的构建工具,如和 WebpackVite 类似的 RollupParcelEsbuild自动化构建工具 gruntgulp,以及更加久远的 YUI Tool

这些工具的存在,构成了前端构建工具的发展史。

YUI Tool + Ant

YUI tool 是 07 年左右出现的一个构建工具,功能比较简单,用于压缩混淆 CSSjs 代码,需要配合 javaAnt 使用。

当时 web 应用开发主要采用 JSP,还不像现在这样前后端分离,通常是由 java 开发人员来编写 js、css 代码,前端代码都是和后端 java 代码放在一起的。因此前端代码的压缩混淆也就基于 java 实现了。

Grunt / Gulp

Grunt / Gulp 都是运行在 node 环境上的自动化工具。

在开发过程中,我们可以将一些常见操作如解析 htmles6 代码转换为 es5less / sass 代码转换为 css 代码代码检查代码压缩代码混淆配置成一系列任务,然后通过 Grunt / Gulp 自动执行这些任务。

GruntGulp 的不同点:

  • 使用 Grunt的过程中,会产生一些中间态的临时文件。一些任务生成临时文件,其它任务可能会基于临时文件再做处理并生成最终的构建后文件,导致出现多次 I/O

  • Gulp 有文件流的概念,通过管道将多个任务和操作连接起来,不会产生临时文件,减少了 I/O 操作,流程更清晰,更纯粹,大大加快了构建的速度。

Webpack / Rollup / Parcel

WebpackRollupParcel 统称为静态模块打包器

这一类构建工具,通常需要指定入口 - entry,然后以 entry 为起点,通过分析整个项目内各个源文件之间的依赖关系,构建一个模块依赖图 - module graph,然后再将 module graph 分离为三种类型的 bundle: entry 所在的 initial bundlelazy load 需要的 async bundle 和自定义分离规则的 custome bundle

这几个构建工具各有优势:

  • Webpack 大而全,配置灵活,生态丰富,是构建工具的首选。

  • Parcel 号称零配置,使用简单,适合不太需要定制化构建的项目使用。

  • Rollup 推崇 ESM 标准开发,打包出来的代码干净,适用于组件库开发。

Vite / Esbuild

新一代构建工具。

esbuild, 基于 Go 语言实现,代码直接编译成机器码(不用像 js 那样先解析为字节码,再编译为机器码),构建速度比 webpack 更快。

vite, 开发模式下借助浏览器对 ESM 的支持,采用 nobundle 的方式进行构建,能提供极致的开发体验;生产模式下则基于 rollup 进行构建。

js 模块化的发展史和构建工具的变化

javascript 语言设计之初,只是作为一个简单的脚本语言用来丰富网站的功能,并不像 javac++ 那样有 module 的概念,发展到现在的模样,也经历了相当长的时间。

这段时间,可以简单归纳为:

  • 青铜时代 - no module;
  • 白银时代 - cjs、amd、cmd、umd、esm 相继出现;
  • 黄金时代 - 组件模块化;

不同的时代,构建工具也不同。

青铜时代

由于没有 module 的概念, javascript 无法在语言层面实现模块之间的相互隔离相互依赖,只能由开发人员手动处理。

相应的,早期的 web 开发也比较简单甚至简陋:

  • 通过对象iife(或者闭包)的方式实现模块隔离
  • 通过手动确定 script加载顺序确定模块之间的依赖关系
  • jsp 开发模式,没有专门的前端,htmljscss 代码通常也由后端开发人员编写。

为了节省带宽保密,通常需要对前端代码做压缩混淆处理。这个时候,构建工具为 YUI Tool + Ant

白银时代

chrome v8 引擎 和 node 的横空出世,给前端带来了无限的可能。

同时,javascript 的模块化标准也有了新的发展:

  • commonjs 规范,适用于 node 环境开发。
  • amdcmd 规范,适用于浏览器环境。
  • umd,兼容 amdcommonjs,代码可以同时运行在浏览器node 环境。
  • ESM,即 ES6 module(这个时候还不是很成熟);

同时还出现了 lesssasses6jslinteslinttypescript 等新的东西, 前端角色也开始承担越来越重要的作用,慢慢的独立出来。

有了 node 提供的平台,大量的工具开始涌现:

  • requirejs 提供的 r.js 插件,可以分析 amd 模块依赖关系合并压缩 js优化 css
  • less / sass 插件,可以将 less / sass 代码转化为 css 代码;
  • babel,可以将 es6 转化为 es5
  • typescript,将 ts 编译为 js
  • jslint / eslint,代码检查;
  • ...

这个时候,我们可以将上面的的这些操作配置成一个个任务,然后通过 Grunt / Gulp 自动执行任务。

黄金时代

基于 angularVueReact 三大框架Webpack 的使用,组件模块化成为前端开发的主流模式。同时 ESM 规范也原来越成熟,被更多的浏览器支持。

ReactWebpack 为例,通常我们会将一个应用涉及到的所有的功能拆分为一个个组件,如路由组件、页面组件、表单组件、表格组件等,一个组件对应一个源文件,然后通过 Webpack 将这些源文件打包。在开发过程中,还会通过 Webpack 开启一个 local server,实时查看代码的运行效果。

Webpack 是一个静态模块打包器,它会以 entry 指定的入口文件为起点,分析整个项目内各个源文件之间的依赖关系,构建一个模块依赖图 - module graph,然后将 module graph 分离为多个 bundle。在构建 module graph 的过程中,会使用 loader 处理源文件,将它们转化为浏览器可以是识别的 jscssimage音视频等。

随着时间的发展, Webpack 的功能越来越来强大,也迎来诸多对手。

Webpack1
   |
   |
Rollup 出现(推崇 ESM 规范,可以实现 tree shaking, 打包出来的代码更干净)
   |
   |
Webpack2(也实现了 tree shaking, 但是配置还是太繁琐了)
   |
   |
Parcel (号称 0 配置)
   |
   |
Webpack4(通过 mode 确定 development 和 production 模式,各个模式有自己的默认配置)
   |
   |
Webpack5(持久化缓存、module federation)
Esbuild(采用 go 语言开发,比 Webpack 更快)
Vite(推崇 ESM 规范,开发模式采用 nobundle,更好的开发体验)

丰富的构建工具,形成了百花绽放的局面,可用于不同的情形,给开发人员带来了越来越多的选择。

结束语

目前来看,构建工具在整个前端体系中占据的位置是越来越重要。只会 Webpack 甚至不懂构建工具已经无法满足日常开发。这就需要我们时时学习,紧跟时代的脚步,了解最新的技术,不断前进。

以上就是JavaScript前端构建工具原理的理解的详细内容,更多关于JavaScript前端构建工具的资料请关注编程网其它相关文章!

--结束END--

本文标题: JavaScript前端构建工具原理的理解

本文链接: https://lsjlt.com/news/164635.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript前端构建工具原理的理解
    目录前言构建工具的前世今生YUI Tool + AntGrunt / GulpWebpack / Rollup / ParcelVite / Esbuildjs 模块化的发展史和构建...
    99+
    2024-04-02
  • 前端构建工具大盘点
    当今前端开发中,构建工具已经成为一个不可或缺的部分。它们可以帮助我们自动化任务、优化代码、提高开发效率。社区涌现出越来越多的前端构建工具,本文就来介绍一些最流行的前端构建工具,以及它们各自的优缺点,帮助你更好地选择最适合自己项目的工具。We...
    99+
    2023-05-14
    工具 前端 构建
  • 前端构建工具之gulp怎么用
    这篇文章将为大家详细讲解有关前端构建工具之gulp怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言在如今的前端开发中,已经不再是一些静态文件了。对于很多Web A...
    99+
    2024-04-02
  • 前端 JavaScript运行原理
    目录1、什么是JavaScript引擎2、V8引擎3、运行时环境4、运行时的调用栈5、异步任务6、总结1、什么是JavaScript引擎 JavaScript引擎是一个计算机程序,它...
    99+
    2024-04-02
  • Vue的新型前端构建工具Vite怎么用
    本文小编为大家详细介绍“Vue的新型前端构建工具Vite怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue的新型前端构建工具Vite怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。从 Vite 开始...
    99+
    2023-06-30
  • 如何理解构建客户端应用的开源工具集Oracle JET
    如何理解构建客户端应用的开源工具集Oracle JET,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Oracle  JavaSc...
    99+
    2024-04-02
  • React前端框架实现原理的理解
    目录vdomdsl 的编译渲染 vdom组件状态管理react 架构的演变fiber 架构总结vdom react 和 vue 都是基于 vdom 的前端框架,我们先聊下 vdom:...
    99+
    2024-04-02
  • 教你用NodeJs构建属于自己的前端脚手工具
    目录一.前言二.技术栈三.特别说明四.构建项目五.安装依赖六.目录说明七.实战(一).入口文件(二).命令文件(三).创建命令(四).公共处理交互式命令(五).选择项目框架交互式命令...
    99+
    2024-04-02
  • JavaScript前端实用的工具函数封装
    目录1.webpack里面配置自动注册组件2.自定义指令图片懒加载3.图片文件转base64格式(实现预览)4.数组转为tree型结构(递归实现)5.递归深拷贝6.将数组里面的对象转...
    99+
    2024-04-02
  • 前端浏览器的工作原理是什么
    这期内容当中小编将会给大家带来有关前端浏览器的工作原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。浏览器架构在讲浏览器架构之前,先理解两个概念,进程和线程。进程(process)是程序的一次执行过...
    99+
    2023-06-03
  • JavaScript 浏览器开发者工具,前端开发的超级工具
    JavaScript 浏览器开发者工具是一套强大的工具,可帮助前端开发人员调试、分析和优化其 Web 应用程序。这些工具集成在 Chrome、Firefox、Safari 和 Microsoft Edge 等现代浏览器中,提供了各种功能,...
    99+
    2024-04-02
  • JS前端架构pnpm构建Monorepo方式管理demo
    目录 写在前面 什么是Monorepo?什么是pnpm? 搞一个Monorepo的demo玩玩 安装依赖 packageA中引用packageB 写在最后 写在前面 Monorepo...
    99+
    2024-04-02
  • Vue状态管理工具Vuex工作原理解析
    目录一、什么是vuex二、vuex的工作方式三、vuex的使用场景四、工作流程五、vuex的核心API六、应用七、vuex的工作流程一、什么是vuex Vuex是vue项目的状态管理...
    99+
    2023-02-01
    Vue状态管理工具Vuex Vue状态管理器Vuex Vue Vuex
  • 如何理解前端的自动化重构
    本篇内容主要讲解“如何理解前端的自动化重构”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解前端的自动化重构”吧!过去,我一直想着抽时间写一个小的前端工具,...
    99+
    2024-04-02
  • 前端构建CSS预处理器的示例分析
    这篇文章主要介绍前端构建CSS预处理器的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mi...
    99+
    2024-04-02
  • 一文带你了解前端包管理工具npm、yarn和pnpm
    目录为什么需要包管理工具?版本管理规范前端主流包管理工具yarn vs npm vs pnpm包管理工具安装和版本切换安装项目依赖npm 、yarn 和 pnpm 常用命令安全性lo...
    99+
    2024-04-02
  • Vue 前端路由工作原理hash与history的区别
    目录什么是路由?vue-router的工作原理1.mode:'hash',在URL中会多'#'2.mode:'history'什么是路...
    99+
    2024-04-02
  • 解析springBoot-actuator项目构造中health端点工作原理
    目录前言actuator功能和集成分离actuator自动装载健康检查指示器配置健康检查端点配置health健康检查实现自定义健康检查指示器health其他使用细节文末结语前言 最近...
    99+
    2024-04-02
  • 工具分享:实现前端埋点的自动化管理
    埋点一直是 H5 项目中的重要一环,埋点数据更是后期改善业务和技术优化的重要基础。【推荐学习:web前端、编程教学】在日常的工作中,经常会有产品或者业务的同学来问,“这个项目现在有哪些埋点?”,“这个埋点用在哪些地方?”像这样的问题基本上都...
    99+
    2023-05-14
    前端埋点 前端 web前端 Webpack ESLint Vue.js
  • RocketMQ Namesrv架构工作原理详解
    目录1 概念2 核心数据结构和API2.1 Namesrv的核心数据结构2.2 Namesrv的API3 Namesrv架构3.1组件3.2 Namesrv四个功能模块1 概念 Na...
    99+
    2022-11-13
    RocketMQ Namesrv架构 Namesrv架构
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作