详解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初学困境—js初学
Dec 29 Javascript
JavaScript实现拼音排序的方法
Nov 20 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
Sep 06 Javascript
js中json处理总结之JSON.parse
Oct 14 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
js实现增加数字显示的环形进度条效果
Feb 05 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
Jul 31 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
Sep 12 Javascript
VUE实现密码验证与提示功能
Oct 18 Javascript
Vue.js中的高级面试题及答案
Jan 13 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 11 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
Dec 24 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
php实现读取内存顺序号
2015/03/29 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
js实现select组件的选择输入过滤代码
2014/10/14 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
Python AES加密实例解析
2018/01/18 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python如何删除列为空的行
2020/07/17 Python
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
集团公司总经理岗位职责
2013/12/20 职场文书
班主任个人工作反思
2014/04/28 职场文书
企业环保标语
2014/06/10 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
2015年班干部工作总结
2015/04/29 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
人事任命书范本
2015/09/21 职场文书
MySQL三种方式实现递归查询
2022/04/18 MySQL