详解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 相关文章推荐
由document.body和document.documentElement想到的
Apr 13 Javascript
JavaScript中的isXX系列是否继续使用的分析
Apr 16 Javascript
js实现文本框中焦点在最后位置
Mar 04 Javascript
JavaScript中的Truthy和Falsy介绍
Jan 01 Javascript
jQuery调取jSon数据并展示的方法
Jan 29 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
Apr 02 Javascript
基于jQuery实现点击列表加载更多效果
May 31 Javascript
jQuery Validate插件自定义验证规则的方法
Dec 27 Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 Javascript
又拍云 Node.js 实现文件上传、删除功能
Oct 28 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
Jun 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
PHP print类函数使用总结
2010/06/25 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
python远程邮件控制电脑升级版
2019/05/23 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
python怎么调用自己的函数
2020/07/01 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
应届生程序员求职信
2013/11/05 职场文书
理财投资建议书
2014/03/12 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
服务口号大全
2014/06/11 职场文书
高中学校对照检查材料
2014/08/31 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
出国留学英文自荐信
2015/03/25 职场文书
队名及霸气口号大全
2015/12/25 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书