详解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+json实现的搜索加分页效果
Mar 31 Javascript
jquery 触发a链接点击事件解决方案
May 02 Javascript
捕获键盘事件(且兼容各浏览器)
Jul 03 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
Mar 10 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
Jan 23 Javascript
七个不允许错过的jQuery小技巧
Dec 21 Javascript
js HTML5 Ajax实现文件上传进度条功能
Feb 13 Javascript
浅谈js数组和splice的用法
Dec 04 Javascript
AngularJS Select(选择框)使用详解
Jan 18 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
Oct 17 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
element-ui点击查看大图的方法示例
Dec 14 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无刷新上传文件实现代码
2011/09/19 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
php从字符串创建函数的方法
2015/03/16 PHP
php无限极分类实现方法分析
2019/07/04 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
input框中的name和id的区别
2016/11/16 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
Python里隐藏的“禅”
2014/06/16 Python
linux下python抓屏实现方法
2015/05/22 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python标准库itertools的使用方法
2020/01/17 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
delegate与普通函数的区别
2014/01/22 面试题
在职人员函授期间自我评价分享
2013/11/08 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
个人租房协议书样本
2014/10/01 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server