使用webpack将ES6转化ES5的实现方法


Posted in Javascript onOctober 13, 2019

babel使用

打开babel官网,按教程安装babel

安装

npm install --save-dev babel-loader @babel/core @babel/preset-env

配置rules

module: {
 rules: [
  { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }
 ]
}

生成 .babelrc文件

{
 "presets": ["@babel/preset-env"]
}

此时webpack已经能正确的将高版本的js语法转为低版本的语法,但是对于新增的api并不会转化,如promise。这时我们就需要其他的插件

使用polyfill插件,对于babel=>7.4.0该方法弃用

安装

npm install --save @babel/polyfill

修改 .babelrc

{
 "presets": [
  [
   "@babel/preset-env",
   {
     "useBuiltIns":"usage" // 只转化使用了的API
   }
  ]
 ]
}

使用 在需要转换的文件里引入polyfill

import "@babel/polyfill";

@babel/polyfill 和 @babel/preset-env 的关系

@babel/preset-env 中与 @babel/polyfill 的相关参数有 targets 和 useBuiltIns 两个

targets: 支持的目标浏览器的列表

useBuiltIns: 参数有 “entry”、”usage”、false 三个值。默认值是false,此参数决定了babel打包时如何处理@babel/polyfilll 语句。

“entry”: 会将文件中 import‘@babel/polyfilll'语句 结合 targets ,转换为一系列引入语句,去掉目标浏览器已支持的polyfilll 模块,不管代码里有没有用到,只要目标浏览器不支持都会引入对应的polyfilll 模块。

“usage”: 不需要手动在代码里写import‘@babel/polyfilll',打包时会自动根据实际代码的使用情况,结合 targets 引入代码里实际用到 部分 polyfilll 模块

false: 对 import‘@babel/polyfilll'不作任何处理,也不会自动引入 polyfilll 模块

使用plugin-transform-runtime

安装

npm install --save-dev @babel/plugin-transform-runtime

修改 .babelrc

{
"presets": [
  [
   "@babel/preset-env"
  ]
 ],
 "plugins": [
  [
   "@babel/plugin-transform-runtime",
   {
    "absoluteRuntime": false,
    "corejs": 3,
    "helpers": true,
    "regenerator": true,
    "useESModules": false
   }
  ]
 ]
}

注意上面corejs设置项,不同的值需要不同的依赖包

corejs的值 需要安装的依赖包
false npm install --save @babel/runtim
2 npm install --save @babel/runtime-corejs2
3 npm install --save @babel/runtime-corejs3

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

Javascript 相关文章推荐
解决jquery异步按一定的时间间隔刷新问题
Dec 10 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
Jan 25 Javascript
JS操作CSS随机改变网页背景实现思路
Mar 10 Javascript
js的延迟执行问题分析
Jun 23 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
JS两种类型的表单提交方法实例分析
Nov 28 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
Sep 05 Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
js实现抽奖功能
Nov 24 Javascript
javascript中call,apply,bind的区别详解
Dec 11 Javascript
修改NPM全局模式的默认安装路径的方法
Dec 15 Javascript
vue中uni-app 实现小程序登录注册功能
Oct 12 #Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 #jQuery
微信小程序 scroll-view 水平滚动实现过程解析
Oct 12 #Javascript
微信小程序iOS下拉白屏晃动问题解决方案
Oct 12 #Javascript
vue中添加与删除关键字搜索功能
Oct 12 #Javascript
jquery 遍历hash操作示例【基于ajax交互】
Oct 12 #jQuery
jquery 时间戳转日期过程详解
Oct 12 #jQuery
You might like
php 生成唯一id的几种解决方法
2013/03/08 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
简单实现php上传文件功能
2017/09/21 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python实现统计单词出现的个数
2015/05/28 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
工艺工程师岗位职责
2014/03/04 职场文书
公司办公室岗位职责
2014/03/19 职场文书
学校运动会报道稿
2014/09/23 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
高老头读书笔记
2015/06/30 职场文书
Django框架中模型的用法
2022/06/10 Python