详解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 相关控件的事件操作分解
Aug 03 Javascript
Javascript UrlDecode函数代码
Jan 09 Javascript
JavaScript CSS修改学习第六章 拖拽
Feb 19 Javascript
jquery 元素相对定位代码
Oct 15 Javascript
引用外部脚本时script标签关闭的写法
Jan 20 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
JS实现DIV高度自适应窗口示例
Feb 16 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
Apr 08 jQuery
详解javascript中的babel到底是什么
Jun 21 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
Sep 05 Javascript
一起深入理解js中的事件对象
Feb 06 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
PHP5 面向对象程序设计
2008/02/13 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
jQuery extend 的简单实例
2013/09/18 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python中enumerate的用法实例解析
2014/08/18 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
PHP中如何创建和修改数组
2012/05/02 面试题
室内设计专业个人的自我评价
2013/12/18 职场文书
便利店投资创业计划书
2014/02/08 职场文书
教师专业自荐书范文
2014/02/10 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
详细了解MVC+proxy
2021/07/09 Java/Android