详解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中OnLoad几种使用方法
Dec 15 Javascript
使图片旋转的3种解决方案
Nov 21 Javascript
浅析javascript的间隔调用和延时调用
Nov 12 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
Dec 16 Javascript
JavaScript中Function函数与Object对象的关系
Dec 17 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
Apr 25 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 25 Javascript
详解关于React-Router4.0跳转不置顶解决方案
May 10 Javascript
vue实现页面滚动到底部刷新
Aug 16 Javascript
js简单的分页器插件代码实例
Sep 11 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
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
vue elementui form表单验证的实现
2018/11/11 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
python中range()与xrange()用法分析
2016/09/21 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
python素数筛选法浅析
2018/03/19 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Python子类继承父类构造函数详解
2019/02/19 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
不错的求职信范文
2014/07/20 职场文书
教师批评与自我批评
2014/10/15 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
培训计划通知
2015/07/15 职场文书
2016猴年春节问候语
2015/11/11 职场文书
基于Redis过期事件实现订单超时取消
2021/05/08 Redis
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python
Go语言grpc和protobuf
2022/04/13 Golang