详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)


Posted in Javascript onJanuary 07, 2019

由于Iview编译使用到了es6的一些新特性,Internet Explorer所有版本中都会报错,缺少includes、findIxdex等问题。

本人研究涉及到的环境:VueCli3.2 + iview 3.1.5

在IE中不支持ES6的新特性,例如:includes、findIndex……

以下方案可以解决该问题:

1.  Github iview仓储Issues中提到的

改编译范围请用 transpileDependencies: [‘iview'],不要用 include.add,因为默认配置里用了 exclude,在 webpack 中,多个条件同时存在时需要每个条件都满足才执行 rule。

但是加了这个选项后在所有浏览器里都会报错,因为 iView 里这个文件不兼容 ES Module。该文件是用很旧版本的 UMD 格式打包的,新版本 UMD 修复了报错的问题,但没有解决和 ES Module 互操作的问题。在 Webpack 4 中,ES Module 不能和 CommonJS / UMD 混用。

所以这里本质上是 iView 对 Webpack 4 支持的问题,让他们把源码全部转成 ES Module 就好了。
在vue.config.js中添加transpileDependencies: [‘iview']后,可以让bable编译过程中检查iview的代码,自动添加代码中用到的polyfill。

但是由于iview中有一个文件使用的UMD打包,所以编译后的代码还是在运行环境中报错,导致项目无法使用。

该方案虽然解决了ES6语法问题,但是实际使用会报错。

2.  直接给代码添加polyfill

修改bable.config.js使用 useBuiltIns: ‘entry'

module.exports = {presets: [ ['@vue/app', {useBuiltIns:'entry'} ] ]}

在Vue入口文件main中导入bable的polyfill

import'@babel/polyfill';

这种方案bable编译时,会自动导入目标浏览器(browserslist中配置)需要用到的polyfill,可以保证全局代码使用都可以新ES代码。但是,也许有些polyfill会一直用不到,额外增加了编译后的文件体积。

3.  使用balbe env,预置iview中所需要的polyfill(推荐做法)

修改bable.config.js 添加预导入的polyfill。目前我的项目中用到的polyfill有'es6.promise',‘es6.array.find-index',‘es7.array.includes',‘es6.string.includes'

module.exports = { presets: [ ['@vue/app', {
  debug:true,
  polyfills: [ 'es6.promise' , 'es6.array.find-index' , 'es7.array.includes' , 'es6.string.includes' ] 
 } ] ]}

这种方案依然使用Vue项目默认方案,不同的是在项目编译时,会导入polyfills中指定的polyfill,这样既可解决iview在ie中运行报错的问题。

上面中是我目前用到的几polyfill,如果需要其它铺垫,可以自行添加。

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

Javascript 相关文章推荐
JQuery 学习笔记 选择器之四
Jul 23 Javascript
使用JavaScript switch case 另类写法
Mar 14 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
javascript数字数组去重复项的实现代码
Dec 30 Javascript
Jquery实现三层遍历删除功能代码
Apr 23 Javascript
ext前台接收action传过来的json数据示例
Jun 17 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
Apr 06 Javascript
js实现点击文本框显示日期选择器特效代码分享
May 21 Javascript
jQuery实现自动切换播放的经典滑动门效果
Sep 12 Javascript
node文件上传功能简易实现代码
Jun 16 Javascript
浅谈vux之x-input使用以及源码解读
Nov 04 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
Dec 16 Javascript
利用React Router4实现的服务端直出渲染(SSR)
Jan 07 #Javascript
Node.js EventEmmitter事件监听器用法实例分析
Jan 07 #Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
Jan 07 #Javascript
jQuery实现的别踩白块小游戏完整示例
Jan 07 #jQuery
jQuery判断自定义属性data-val用法示例
Jan 07 #jQuery
jQuery实现的简单歌词滚动功能示例
Jan 07 #jQuery
微信小程序发送短信验证码完整实例
Jan 07 #Javascript
You might like
PHP新手上路(十二)
2006/10/09 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
Python类的专用方法实例分析
2015/01/09 Python
Python创建模块及模块导入的方法
2015/05/27 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
Python 忽略warning的输出方法
2018/10/18 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
美国眼镜网:GlassesUSA
2017/09/07 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
个人查摆剖析材料
2014/02/04 职场文书
群众路线党课主持词
2014/04/01 职场文书
学生会宣传部部长竞选演讲稿
2014/04/25 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
升职演讲稿范文
2014/05/23 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
区域经理岗位职责
2015/02/02 职场文书
银行工作心得体会范文
2016/01/23 职场文书