详解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的抓取博客园首页RSS的代码
Dec 01 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
May 12 Javascript
jquery学习总结(超级详细)
Sep 04 Javascript
JavaScript中对象property的读取和写入方法介绍
Dec 30 Javascript
微信小程序实现图片放大预览功能
Oct 22 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
Feb 09 Javascript
在vue2.0中引用element-ui组件库的方法
Jun 21 Javascript
vue.js 实现点击展开收起动画效果
Jul 07 Javascript
React-router4路由监听的实现
Aug 07 Javascript
微信小程序实现拼图小游戏
Oct 22 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
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP令牌 Token改进版
2008/07/18 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
centos下更新Python版本的步骤
2013/02/12 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
小学教师事迹材料
2014/01/13 职场文书
聚美优品广告词改编
2014/03/14 职场文书
和睦家庭事迹
2014/05/14 职场文书
工作年限证明模板
2014/11/01 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
追悼会悼词大全
2015/06/23 职场文书
人力资源部工作计划
2019/05/14 职场文书