详解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 text(),val(),html()方法区别总结
Nov 04 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
Dec 27 Javascript
原生javaScript做得动态表格(注释写的很清楚)
Dec 29 Javascript
AspNet中使用JQuery boxy插件的确认框
May 20 Javascript
js实现可输入可选择的select下拉框
Dec 21 Javascript
BootStrap 弹出层代码
Feb 09 Javascript
Javascript中引用类型传递的知识点小结
Mar 06 Javascript
Node.js之网络通讯模块实现浅析
Apr 01 Javascript
vue实现2048小游戏功能思路详解
May 09 Javascript
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
微信小程序实现原生步骤条
Jul 25 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 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获取json数据所有的节点路径
2015/05/17 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
jquery动态添加删除div 具体实现
2013/07/20 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
python中随机函数random用法实例
2015/04/30 Python
python更新列表的方法
2015/07/28 Python
Python实现的快速排序算法详解
2017/08/01 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
Python zip()函数用法实例分析
2018/03/17 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
python 19个值得学习的编程技巧
2020/08/15 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
租赁意向书范本
2014/04/01 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
呐喊读书笔记
2015/06/30 职场文书