vue IE11、10出现语法错误的问题

一、前言

开发vue项目过程中,在development模式下发现在IE10,、IE11中无法运行,打开控制台发现已经报错。错误信息提示语法错误,打开定位到的报错位置,可以发现是严格模式报错。编译的代码中出现严格模式可能是因为代码中存在es6而没有被转换为es5,而在项目中已经配置了babel;正常情况下是不会出现es6未被转换的情况的。

由于babel配置采用的是vue官方推荐的或者说vue官方默认的方案,那么是不是这个方案存在什么问题呢。

打开vue-cli官方文档,在其文档中看到这样的描述:

可以看到,默认情况下useBuiltIns的值为usage,而这种情况下如果项目中引入的依赖包需要特殊的polyfill是无法被检测出来的。那么可以肯定的是问题出自引用的依赖包中的代码包含高版本的es语法的特性而没有被检测出来进行polyfill。

二、解决方案

要解决这个问题可以通过引入****browserslist包含的目标的****所有polyfill。

1、安装babel/polyfill依赖包,如果已经安装过则可以跳过。

安装时执行:npm install --save @babel/polyfill

2、在vue.config.js中配置transpileDependencies。这会为该依赖同时开启语法转换和根据使用情况检测 polyfill。

可以根据控制台中报错的位置查看是哪个依赖报错了,这些依赖不一定是在package.json中引用的也可能是package.json中的依赖项的依赖项导致的。报错位置信息示例,如图。

QQ截图20210525121544.jpg

QQ截图20210525121637.jpg

vue.config.js 配置如下:

//指定babel-polyfill 入口 IE11报语法错误bug修复
    configureWebpack: config => {
        config.entry.app = ["babel-polyfill", "./src/main.js"];
    },
    //指定IE下报错的路径,在vue.config.js中配置transpileDependencies。这会为该依赖同时开启语法转换和根据使用情况检测 polyfill
    //transpileDependencies: ['node_modules/*'],
    transpileDependencies: [
        '_pdfjs-dist@2.7.570@pdfjs-dist',
        '_jspdf@2.3.1@jspdf'
    ],

3、配置babel。笔者项目中使用的babel.config.js方式。

module.exports = {
   presets: [
      ['@vue/app', { useBuiltIns: 'entry' }]
   ]
}

4、在入口文件中导入polyfill。

在入口文件中添加 import '@babel/polyfill'。****这会根据 browserslist 目标导入所有 polyfill,这样你就不用再担心依赖的 polyfill 问题了。

在完成以上配置后就不用再担心依赖的polyfill问题了,不过因为包含了一些没有用到的 polyfill 所以最终的包大小可能会增加。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Vue项目兼容IE11 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMASc...
    竿牍阅读 2,520评论 0 0
  • 2020年12月31日14:48:49问题: Vue-cli4.0 依赖包在IE11 出现语法错误原因: 个别依赖...
    孤泉冷月阅读 1,572评论 0 0
  • 项目背景: 我们的项目是在微前端qiankun的基础上包装的自己的框架,并打包上传到自己的npm上开发子应用的时候...
    bypwan阅读 4,520评论 2 1
  • Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但它...
    yhyzgn阅读 1,254评论 0 1
  • 在IE打开项目,控制台报错,如下: 以下罗列百度上vue项目兼容IE的方式(有说法项目最多兼容到IE9) ...
    菏泽的鱼香阅读 2,228评论 0 1