这篇文章主要介绍了JavaScript前端构建工具的原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript前端构建工具的原理是什么文章都会有所收获,下面我们一起来看看吧。谈到构建工具,大家首先想到的肯定就是 Webpack
以及现在最????的 Vite
。Webpack
,功能强大,生态丰富,从面世到今天,一直是很受大家欢迎;Vite
采用 unbundle
构建模式,带来了极致的开发体验,给开发人员以新的选择。在这两个构建工具之外,还有其他的构建工具,如和 Webpack
、Vite
类似的 Rollup
、Parcel
、Esbuild
,自动化构建工具 grunt
、gulp
,以及更加久远的 YUI Tool
。这些工具的存在,构成了前端构建工具的发展史。YUI tool
是 07 年左右出现的一个构建工具,功能比较简单,用于压缩混淆 css
和 js
代码,需要配合 java
的 Ant
使用。当时 web 应用开发主要采用 JSP
,还不像现在这样前后端分离,通常是由 java 开发人员来编写 js、css 代码,前端代码都是和后端 java 代码放在一起的。因此前端代码的压缩混淆也就基于 java 实现了。Grunt
/ Gulp
都是运行在 node
环境上的自动化工具。在开发过程中,我们可以将一些常见操作如解析 html
、es6 代码转换为 es5
、less / sass 代码转换为 css 代码
、代码检查
、代码压缩
、代码混淆
配置成一系列任务,然后通过 Grunt
/ Gulp
自动执行这些任务。Grunt
和 Gulp
的不同点:使用 Grunt
的过程中,会产生一些中间态的临时文件。一些任务生成临时文件,其它任务可能会基于临时文件再做处理并生成最终的构建后文件,导致出现多次 I/O
。Gulp
有文件流的概念,通过管道将多个任务和操作连接起来,不会产生临时文件,减少了 I/O
操作,流程更清晰,更纯粹,大大加快了构建的速度。Webpack
、Rollup
、Parcel
统称为静态模块打包器
。这一类构建工具,通常需要指定入口 – entry
,然后以 entry
为起点,通过分析整个项目内各个源文件之间的依赖关系,构建一个模块依赖图 – module graph
,然后再将 module graph
分离为三种类型的 bundle
: entry
所在的 initial bundle
、lazy load
需要的 async bundle
和自定义分离规则的 custome bundle
。这几个构建工具各有优势:Webpack
大而全,配置灵活,生态丰富,是构建工具的首选。Parcel
号称零配置,使用简单,适合不太需要定制化构建的项目使用。Rollup
推崇 ESM
标准开发,打包出来的代码干净,适用于组件库开发。新一代构建工具。esbuild
, 基于 go
语言实现,代码直接编译成机器码(不用像 js 那样先解析为字节码,再编译为机器码),构建速度比 webpack
更快。vite
, 开发模式下借助浏览器对 ESM
的支持,采用 nobundle
的方式进行构建,能提供极致的开发体验;生产模式下则基于 rollup
进行构建。javascript
语言设计之初,只是作为一个简单的脚本语言用来丰富网站的功能,并不像 java
、c++
那样有 module
的概念,发展到现在的模样,也经历了相当长的时间。这段时间,可以简单归纳为:青铜时代
– no module;白银时代
– cjs、amd、cmd、umd、esm 相继出现;黄金时代
– 组件模块化;不同的时代,构建工具也不同。由于没有 module
的概念, javascript
无法在语言层面实现模块之间的相互隔离
、相互依赖
,只能由开发人员手动处理。相应的,早期的 web
开发也比较简单甚至简陋:通过对象
、iife(或者闭包)
的方式实现模块隔离
;通过手动确定 script
的加载顺序
确定模块之间的依赖关系
。jsp
开发模式,没有专门的前端,html
、js
、css
代码通常也由后端开发人员编写。为了节省带宽
和保密
,通常需要对前端代码做压缩混淆
处理。这个时候,构建工具为 YUI Tool
+ Ant
。chrome v8
引擎 和 node
的横空出世,给前端带来了无限的可能。同时,javascript
的模块化标准也有了新的发展:commonjs
规范,适用于 node
环境开发。amd
、cmd
规范,适用于浏览器
环境。umd
,兼容 amd
、commonjs
,代码可以同时运行在浏览器
和 node
环境。ESM
,即 ES6 module
(这个时候还不是很成熟);同时还出现了 less
、sass
、 es6
、 jslint
、 eslint
、typescript
等新的东西, 前端角色也开始承担越来越重要的作用,慢慢的独立出来。有了 node
提供的平台,大量的工具开始涌现:requirejs
提供的 r.js
插件,可以分析 amd 模块依赖关系
、合并压缩 js
、优化 css
;less
/ sass
插件,可以将 less
/ sass
代码转化为 css
代码;babel
,可以将 es6
转化为 es5
;typescript
,将 ts
编译为 js
;jslint
/ eslint
,代码检查;…这个时候,我们可以将上面免费云主机域名的的这些操作配置成一个个任务,然后通过 Grunt
/ Gulp
自动执行任务。基于 Angular
、Vue
、React
三大框架和 Webpack
的使用,组件模块化
成为前端开发的主流模式。同时 ESM
规范也原来越成熟,被更多的浏览器支持。以 React
和 Webpack
为例,通常我们会将一个应用涉及到的所有的功能拆分为一个个组件,如路由组件、页面组件、表单组件、表格组件等,一个组件对应一个源文件,然后通过 Webpack
将这些源文件打包。在开发过程中,还会通过 Webpack
开启一个 local server
,实时查看代码的运行效果。Webpack
是一个静态模块打包器,它会以 entry
指定的入口文件为起点,分析整个项目内各个源文件之间的依赖关系,构建一个模块依赖图 – module graph
,然后将 module graph
分离为多个 bundle
。在构建 module graph
的过程中,会使用 loader
处理源文件,将它们转化为浏览器可以是识别的 js
、css
、image
、音视频
等。随着时间的发展, Webpack
的功能越来越来强大,也迎来诸多对手。关于“JavaScript前端构建工具的原理是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JavaScript前端构建工具的原理是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。
go语言中关键字有25个,分别有:break(退出循环)、default(选择结构默认项)、func(定义函数)、interface(定义接口)、case(选择结构标签)、const(定义常量)、continue、select、chan、continue(跳过…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。