美文网首页Web前端之路前端Vue专辑Vue.js专区
解决 Vue 浏览器兼容 edge safari ie 问题

解决 Vue 浏览器兼容 edge safari ie 问题

作者: AvenKe | 来源:发表于2019-06-12 15:45 被阅读3次

最近做的一个Vue项目,遇到了在Edge浏览器,Safari(version: 9.xx)浏览器上打不开的问题。分别有以下报错:
Safari Error:

SyntaxError: Unexpected keyword 'const'. Const declarations are not supported in strict mode.

Edge Error:

SCRIPT1028: Expected identifier, string or number

const 和 ...(spread operator)语法都是ES6语法,这说明在Edge和safari 9 浏览器下都不支持ES6语法。带着这个判断,小编去查了一下es6的浏览器支持情况,果不其然,safari10以下和Edge14以下 和 IE 都不支持es6语法,具体ES6浏览器支持情况请参考以下表格:
Browser Support for ES6 (ECMAScript 2015)

Browser Version Date
Chrome 58 Apr 2017
Firefox 54 Jun 2017
Edge 14 Aug 2016
Safari 10 Sep 2016
Opera 55 Aug 2018

找到问题的原因在于浏览器不支持ES6语法,所以需要使用Babel去编译。接下来是如何在前端项目中配置babel,使能够将ES6编译成ES5语法:

  • 第一步,创建一个.babelrc文件在你的前端项目的根目录下,内容如下:
{
  "presets": [
    "@babel/preset-env"
  ],
  "plugins": [
    "transform-vue-jsx",
    "@babel/plugin-transform-runtime"
  ]
}
  • 第二步,安装以上babel presets 和 plugins:
npm i @babel/preset-env transform-vue-jsx @babel/plugin-transform-runtime -S -D
  • 第三部, 安装babel-loader, 配置到webpack.common.js 的loader,使其编译指定目录下的js文件:
npm i babel-loader -S -D

webpack.common.js loader配置: 
module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                include: [path.join(__dirname, '..', 'src'),  path.join(__dirname, '..', 'node-modules')],
                options: {
                    presets: ['@babel/preset-env']
                }
            }
      ]
}

注意: 所有使用到了ES6语法的文件都需要配置在以上的 module> rules> include 里面。
重新运行项目,刷新浏览器发现页面恢复正常。

这篇文章涉及到的前端技术包括:ES6的新特性babel的配置,等等。感兴趣的同学可以查看小编的其他文章或者自行学习。
参考文献: From ES5 to ESNext

相关文章

网友评论

    本文标题:解决 Vue 浏览器兼容 edge safari ie 问题

    本文链接:https://www.haomeiwen.com/subject/amhlfctx.html