Webpack4 使用Babel处理ES6语法的方法示例
作者:芦苇De四季 发布时间:2023-08-30 08:12:37
修改 index.js 内容,写一些 ES6
的语法:
const arr = [
new Promise(() => {}),
new Promise(() => {})
];
arr.map(item => {
console.log(item);
})
ES6
很强大,但目前并不是所有的浏览器都支持,所以需要用到 Babel
,让旧的浏览器或环境中将 ES6
代码转换为向后兼容版本的 JavaScript
代码。
来试一下吧,先安装需要用的 Babel
包:
npm install babel-loader @babel/core -D
配置 webpack.config.js,增加一条 rulues :
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/, // 排除该目录下的所有代码
loader: "babel-loader"
}]
}
babel-loader
告诉了 webpack
怎么处理 ES6
代码,但它并不会将ES6
代码翻译成向后兼容版本的代码,如果想要执行这一步,还需要安装一个模块 preset-env,它包含了所有 ES6
代码转换的规则:
npm install @babel/preset-env -D
安装完之后配置一下:
rules: [{
test: /\.js$/,
exclude: /node_modules/, // 排除该目录下的所有代码
loader: 'babel-loader',
options:{
'presets': ['@babel/preset-env']
}
}]
这样,运行打包命令,就可以把 ES6
语法翻译成 ES5
了,看一下打包的结果:
没问题,语法已经翻译成了当前所有浏览器能识别的语法,但是做到了这一点还是不够,因为那些比较新的对象和函数,比如这里的 Promise
和 map
,在低版本的浏览器里实际还是不存在的。所以这时不仅要进行语法的转换,还要想办法把这些新的特性,补充到低版本的浏览器里。怎么做呢? babel
提供了一个工具叫 polyfill
,安装:
npm install @babel/polyfill -D
然后在 index.js 的最顶部,引入这个包:
import '@babel/polyfill'
保存代码,再次进行打包查看结果,可以发现打包后的 main.js 里面,有了很多代码来帮助实现比如 Promise
和 map
这些新特性。看一下 main.js 文件的大小:
859KB,再看一下没有使用 polyfill
之前的 main.js 大小:
只有4.36KB,使用 polyfill
之后文件变大了很多,这说明了 polyfill
使用了非常多的代码来填入新特性。
但是,index.js 里只使用了 Promise
和 map
,其它的新特性都没用,能不能把那些没用到的实现方法都剔除了呢? 可以,给 preset-env 增加一个 useBuiltIns 配置:
rules: [{
test: /\.js$/,
exclude: /node_modules/, // 排除该目录下的所有代码
loader: 'babel-loader',
options: {
'presets': [
['@babel/preset-env', {
useBuiltIns: 'usage'
}]
]
}
}]
useBuiltIns: 'usage'
的意思就是说,当使用 polyfill
往低版本浏览器填入一些不存在的特性时,不是全部都填入,而是根据业务代码使用到的特性去选择填入,比如这里使用了 Promise
和 map
,那就只填入这两个,其它的都不用。 再次打包查看结果:
可以看到,main.js 的大小只有 138KB了。
这里还可以配置一些其它的参数,比如 targets 参数:
rules: [{
test: /\.js$/,
exclude: /node_modules/, // 排除该目录下的所有代码
loader: 'babel-loader',
options: {
'presets': [
['@babel/preset-env', {
useBuiltIns: 'usage',
targets:{
edge: '17', // edge高于17的版本
firefox: '60', // firefox 高于60的版本
chrome: '67' // chrome高于67的版本
}
}]
]
}
}]
targets 是指打包会运行在什么样的浏览器,这有三个浏览器,并注明了最低版本。在打包的过程中,babel
会去看这些浏览器对 ES6
代码的支持情况,是否有必要进行语法转换、填入一些新特性。 运行打包命令查看结果:
发现还是输出的 Promise
和 map
,并没有进行新特性的填入,说明这三个版本的浏览器对 ES6
的支持已经很好了,不需要在进行额外的处理,main.js 的大小是变成了最初的4.36KB。
到此为止,webpack
对 ES6
的简单处理就完成了。
关于 babel
还有很多东西和配置项,更多的知识要到 https://babel.docschina.org 来学习。
来源:https://segmentfault.com/a/1190000018419118


猜你喜欢
- 如何开始 C#学习过程中有一集讲的是如何查看类图,看完视频后自己就学习如何在VS 2019中查看类图,但是找了好长时间都没有找到查看类图这
- matplotlib绘图库模块安装pip install matplotlib导入pyplot子模块import matplotlib.py
- 今天在项目中,使用Mybatis对oracle数据库进行操作的时候,报出ORA-00911: invalid character的错误,检查
- 虽然熟练掌握SQL的人对于Null不会有什么疑问,但总结得很全的文章还是很难找,看到一篇英文版的, 感觉还不错。Tony Hoare 在19
- OS模块import os1.返回操作系统类型 :posix 是linux操作系统,nt 是windows操作系统print(os.name
- 使用图层可以像素为单位精确定位页面元素,并且可以将层放置在页面的任意位置。当把页面元素放入图层之中时,还可以控制哪个显示在前面、哪个显示在后
- 下载https://downloads.mysql.com/archives/community/下载上面的,下面的不行解压我的解压路径 E
- 表格内容根据票据日期升序(这里是已经排序后的效果)上代码代码中data的内容如下根据paper_date排序,因为目前这种格式不支持比较,需
- 我的测试环境是2000sever ie6.0+sp4 MYIE1.31 (成功通过测试)关闭窗口的途径常用4种:1.双击左上角图标2.直接双
- 以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一
- 使用[[v]*n]*n遇到的坑今天通过[[v]*n]*n快速创建列表, 当我使用索引修改值时, 本来是打算修改a[0][0]这一个元素的第一
- 题目描述682. 棒球比赛你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛
- 用过MySQL之后,不论容量的话,发现比其他两个(sql server 、oracle)好用的多,一下子就喜欢上了。下面给那些还不知道怎么弄
- 通过在网络上查找资料和自己的尝试,我认为以下系统参数是比较关键的:(1)、back_log:要求 MySQL 能有的连接数量。当主要MySQ
- 前言在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析
- 可是,其体积仍然很庞大。所以,在日常工作中,如何给SQL Server的备份文件瘦身,就是很多数据库管理员所关心的问题了。 也许微软的数据库
- li {list-style-image: url(images/disc.gif);}li的这个样式定义是将列表项目使用图片来代替显示的小
- 在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取、插入等。小笔总结了以下几种重置索引的方法:import pa
- 1.操作系统:Windows7 64bitPython版本:3.8下载地址:https://www.python.org/downloads
- 我们可以使用matplotlib.pyplot.locator_params()来控制刻度线 * 的行为。 即使通常会自动确定标记点的位置,