JavaScript前端构建工具的原理是什么

发布时间:2022-07-19 17:24:43 作者:iii
来源:亿速云 阅读:165

这篇文章主要介绍了JavaScript前端构建工具的原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript前端构建工具的原理是什么文章都会有所收获,下面我们一起来看看吧。

构建工具的前世今生

谈到构建工具,大家首先想到的肯定就是 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 的不同点:

Webpack / Rollup / Parcel

WebpackRollupParcel 统称为静态模块打包器

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

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

Vite / Esbuild

新一代构建工具。

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

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

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

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

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

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

青铜时代

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

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

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

白银时代

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

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

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

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

这个时候,我们可以将上面的的这些操作配置成一个个任务,然后通过 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,更好的开发体验)

关于“JavaScript前端构建工具的原理是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JavaScript前端构建工具的原理是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 前端构建工具gulp
  2. JavaScript运行原理是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript

上一篇:.NET中间件与VUE拦截器怎么联合使用

下一篇:JavaScript怎么使用Promise处理回调地狱与async await修饰符

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》