Webpack4 使用Babel处理ES6语法的方法示例


Posted in Javascript onMarch 07, 2019

修改 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了,看一下打包的结果:

Webpack4 使用Babel处理ES6语法的方法示例

没问题,语法已经翻译成了当前所有浏览器能识别的语法,但是做到了这一点还是不够,因为那些比较新的对象和函数,比如这里的 Promisemap,在低版本的浏览器里实际还是不存在的。所以这时不仅要进行语法的转换,还要想办法把这些新的特性,补充到低版本的浏览器里。怎么做呢? babel 提供了一个工具叫 polyfill,安装:

npm install @babel/polyfill -D

然后在 index.js 的最顶部,引入这个包:

import '@babel/polyfill'

保存代码,再次进行打包查看结果,可以发现打包后的 main.js 里面,有了很多代码来帮助实现比如 Promisemap 这些新特性。看一下 main.js 文件的大小:

Webpack4 使用Babel处理ES6语法的方法示例

859KB,再看一下没有使用 polyfill 之前的 main.js 大小:

Webpack4 使用Babel处理ES6语法的方法示例

只有4.36KB,使用 polyfill 之后文件变大了很多,这说明了 polyfill 使用了非常多的代码来填入新特性。
但是,index.js 里只使用了 Promisemap,其它的新特性都没用,能不能把那些没用到的实现方法都剔除了呢? 可以,给 preset-env 增加一个 useBuiltIns 配置:

rules: [{
 test: /\.js$/,
 exclude: /node_modules/, // 排除该目录下的所有代码
 loader: 'babel-loader',
 options: {
  'presets': [
   ['@babel/preset-env', {
    useBuiltIns: 'usage'
   }]
  ]
 }
}]

useBuiltIns: 'usage' 的意思就是说,当使用 polyfill 往低版本浏览器填入一些不存在的特性时,不是全部都填入,而是根据业务代码使用到的特性去选择填入,比如这里使用了 Promisemap,那就只填入这两个,其它的都不用。 再次打包查看结果:

Webpack4 使用Babel处理ES6语法的方法示例

可以看到,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 代码的支持情况,是否有必要进行语法转换、填入一些新特性。 运行打包命令查看结果:

Webpack4 使用Babel处理ES6语法的方法示例

发现还是输出的 Promisemap,并没有进行新特性的填入,说明这三个版本的浏览器对 ES6 的支持已经很好了,不需要在进行额外的处理,main.js 的大小是变成了最初的4.36KB。

到此为止,webpackES6 的简单处理就完成了。

关于 babel 还有很多东西和配置项,更多的知识要到 https://babel.docschina.org 来学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 将元素显示在屏幕的中央的代码
Feb 27 Javascript
jquery随机展示头像代码
Dec 21 Javascript
鼠标滚轮控制网页横向移动实现思路
Mar 22 Javascript
JS获取当前日期时间并定时刷新示例
Mar 04 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
Oct 26 Javascript
ionic 上拉菜单(ActionSheet)实例代码
Jun 06 Javascript
浅谈node的事件机制
Oct 09 Javascript
vue的一个分页组件的示例代码
Dec 25 Javascript
关于单文件组件.vue的使用
Sep 20 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
Apr 27 Javascript
Vue实现购物车实例代码两则
May 30 Javascript
深入理解react 组件类型及使用场景
Mar 07 #Javascript
如何优雅地在vue中添加权限控制示例详解
Mar 07 #Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
Mar 07 #Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 #Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
Mar 07 #jQuery
在Web关闭页面时发送Ajax请求的实现方法
Mar 07 #Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
Mar 07 #Javascript
You might like
可以在线执行PHP代码包装修正版
2008/03/15 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
简单实现python收发邮件功能
2018/01/05 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
python操作kafka实践的示例代码
2019/06/19 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
what is the difference between ext2 and ext3
2015/08/25 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
经营管理策划方案
2014/05/22 职场文书
结对共建协议书
2014/08/20 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
质量负责人岗位职责
2015/02/15 职场文书
英语演讲开场白
2015/05/29 职场文书
小学生读书笔记范文
2015/06/30 职场文书
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android