详解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 相关文章推荐
动态加载iframe时get请求传递中文参数乱码解决方法
May 07 Javascript
JQuery中使用ajax传输超大数据的解决方法
Jul 14 Javascript
JS绘制生成花瓣效果的方法
Aug 05 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
Aug 20 Javascript
基于JavaScript实现动态创建表格和增加表格行数
Dec 20 Javascript
使用jQuery UI库开发Web界面的简单入门指引
Apr 22 Javascript
JavaScript 继承详解(六)
Oct 11 Javascript
vue cli 3.0 使用全过程解析
Jun 14 Javascript
JavaScript的Object.defineProperty详解
Jul 09 Javascript
使用JS判断移动端手机横竖屏状态
Jul 30 Javascript
vue组件之间通信方式实例总结【8种方式】
Feb 22 Javascript
基于node简单实现RSA加解密的方法步骤
Mar 21 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+DBM的同学录程序(1)
2006/10/09 PHP
php 远程关机操作的代码
2008/12/05 PHP
Views rows style模板重写代码
2011/05/16 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
PHP写日志的实现方法
2014/11/05 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
php分页查询的简单实现代码
2017/03/14 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
jQuery的学习步骤
2011/02/23 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
TensorFlow如何实现反向传播
2018/02/06 Python
python list转矩阵的实例讲解
2018/08/04 Python
Python异常处理操作实例详解
2018/08/28 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
python 消费 kafka 数据教程
2019/12/21 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
如何进行Linux分区优化
2013/02/12 面试题
如何开启linux的ssh服务
2015/02/14 面试题
2014年情人节活动方案
2014/02/16 职场文书
电影复兴之路观后感
2015/06/02 职场文书
跑出一片天观后感
2015/06/08 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书