详解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 相关文章推荐
基于javascript滚动图片具体实现
Nov 18 Javascript
jquery获取选中的文本和值的方法
Jul 08 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
jQuery实现图片预加载效果
Nov 27 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
Jun 28 Javascript
原生js的RSA和AES加密解密算法
Oct 08 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
Dec 31 Javascript
JavaScript编写的网页小游戏,很给力
Aug 18 Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
Jul 26 jQuery
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
Mar 20 jQuery
ajax请求前端跨域问题原因及解决方案
Oct 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 中执行排序与 MySQL 中排序
2009/04/21 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python字典操作简明总结
2015/04/13 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
Python装饰器用法实例总结
2018/05/26 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python 元组操作总结
2019/09/18 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
应聘自荐书
2013/10/08 职场文书
高中生旷课检讨书
2014/10/08 职场文书
2014企业年终工作总结
2014/12/23 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
商务司机岗位职责
2015/04/10 职场文书
村党组织公开承诺书
2015/04/30 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
详解Django的MVT设计模式
2021/04/29 Python
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL