详解vue-cli项目在IE浏览器打开报错解决方法

当使用vue-cli创建的项目在IE浏览器中打开时,可能会遇到Object doesn't support property or method 'assign'Promise未定义等错误。这是因为IE浏览器不支持ES6(ES2015)新特性,而vue-cli默认使用的是ES6语法并使用了一些ES6新特性,这对于IE浏览器来说是无法正确识别的。

下面是解决方法的完整攻略:

1. 安装babel-polyfill

babel-polyfill是一个babel插件,它提供了ES6新特性的垫片(polyfill),可以让IE浏览器正确识别ES6语法和新特性。要安装babel-polyfill,可以执行以下命令:

npm install --save babel-polyfill

安装完成之后,在项目入口文件main.js中引入babel-polyfill:

import 'babel-polyfill'

2. 修改babel配置文件

由于vue-cli默认使用的是babel7,因此我们需要修改babel配置文件babel.config.js。在babel.config.js中加入"babel/preset-env"插件,并在plugins选项中加入"transform-runtime"插件,配置如下所示:

module.exports = {
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "entry", // 按需加载ES6垫片
        "corejs": 2 // 需要使用的corejs版本
      }
    ]
  ],
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "corejs": 2, // 需要使用的corejs版本
        "helpers": true,
        "regenerator": true,
        "useESModules": false
      }
    ]
  ]
}

3. 配置webpack

我们需要在vue.config.js文件中对webpack进行配置,以让其正确处理ES6语法和新特性:

module.exports = {
  chainWebpack: config => {

    // 添加babel-polyfill垫片
    config.entry('app').add('babel-polyfill')

    // 添加处理ES6语法和新特性的loader
    config.module
        .rule('es6')
        .test(/\.js$/)
        .use('babel-loader')
        .loader('babel-loader')
        .options({
          presets: [
            [
              '@babel/preset-env',
              {
                useBuiltIns: 'entry',
                corejs: 2
              }
            ]
          ],
          plugins: [
            '@babel/plugin-transform-runtime'
          ]
        })
        .end()
  }
}

示例说明

以下是两个示例,分别说明如何在vue-cli创建的项目中解决Object doesn't support property or method 'assign'Promise未定义错误。

示例1:解决Object doesn't support property or method 'assign'错误

在main.js中添加babel-polyfill的引用:

import 'babel-polyfill'

在babel.config.js中添加"babel/preset-env"插件和"transform-runtime"插件:

module.exports = {
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "entry", // 按需加载ES6垫片
        "corejs": 2 // 需要使用的corejs版本
      }
    ]
  ],
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "corejs": 2, // 需要使用的corejs版本
        "helpers": true,
        "regenerator": true,
        "useESModules": false
      }
    ]
  ]
}

在vue.config.js中添加处理ES6语法和新特性的loader:

module.exports = {
  chainWebpack: config => {
    // 添加babel-polyfill垫片
    config.entry('app').add('babel-polyfill')

    // 添加处理ES6语法和新特性的loader
    config.module
        .rule('es6')
        .test(/\.js$/)
        .use('babel-loader')
        .loader('babel-loader')
        .options({
          presets: [
            [
              '@babel/preset-env',
              {
                useBuiltIns: 'entry',
                corejs: 2
              }
            ]
          ],
          plugins: [
            '@babel/plugin-transform-runtime'
          ]
        })
        .end()
  }
}

示例2:解决Promise未定义错误

在main.js中添加babel-polyfill的引用:

import 'babel-polyfill'

在vue.config.js中添加使用IE11和Safari 9版本的polyfill:

module.exports = {
  chainWebpack: config => {
    // 添加babel-polyfill垫片
    config.entry('app').add('babel-polyfill')

    // 添加处理ES6语法和新特性的loader
    config.module
        .rule('es6')
        .test(/\.js$/)
        .use('babel-loader')
        .loader('babel-loader')
        .options({
          presets: [
            [
              '@babel/preset-env',
              {
                useBuiltIns: 'usage', // 按需加载polyfill
                corejs: 3,
                targets: {
                  ie: '11',
                  safari: '9'
                }
              }
            ]
          ],
          plugins: [
            '@babel/plugin-transform-runtime'
          ]
        })
        .end()
  }
}

注意:使用polyfill时可能会造成打包后文件变大,需要根据项目实际情况选择是否使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vue-cli项目在IE浏览器打开报错解决方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue.js 中的 $watch使用方法

    Vue.js是一款流行的前端框架,提供了丰富的数据绑定和更新机制。其中,$watch是Vue.js提供的一个非常有用的功能,它可以用来监听对象的变化并进行响应,可以应用于各种场景。下面就详细介绍一下Vue.js中的$watch使用方法。 Vue.js中的$watch使用方法 基础语法 在Vue.js中,我们可以使用vm.$watch来创建$watch实例,并…

    Vue 2023年5月29日
    00
  • vue的传参方式汇总和router使用技巧

    一、介绍 在Vue框架中,我们经常需要进行组件之间的传值,根据传参的方式不同,我们又可以将其分为props、$emit、vuex、router、cookie等等。其中,props与$emit的传参方式主要用于组件之间传值,其余的传参方式则主要用于组件之间以及前后端之间的数据交互。 在本篇文章中,我们将对vue的传参方式进行详细的汇总,同时也会涉及到route…

    Vue 2023年5月27日
    00
  • Vue项目的网络请求代理到封装步骤详解

    下面我将为您讲解“Vue项目的网络请求代理到封装步骤详解”的完整攻略。 一、配置跨域请求代理 在 Vue 项目中,我们要请求后端资源,遇到运行时跨域问题,通常有以下几种解决方案: 1. 使用 JSONP JSONP 通过 script 标签的 src 属性请求服务器获取数据,由于 script 标签的 src 属性不受同源策略限制,所以可以跨域请求。但是 J…

    Vue 2023年5月27日
    00
  • vue中render函数的使用详解

    “Vue中Render函数的使用详解”可以帮助初学Vue的开发者更深入了解Vue的模板编译和渲染机制,帮助理解Vue的核心概念和工作原理。 Render函数的基本概念 Render函数是Vue组件中最核心的概念之一,它用于生成组件的虚拟DOM树。Vue官方文档中对Render函数的定义是:渲染函数是一个返回虚拟节点的函数,基于状态渲染出组件 UI。 在Vue…

    Vue 2023年5月27日
    00
  • vue下axios拦截器token刷新机制的实例代码

    下面我将为您讲解“Vue下Axios拦截器Token刷新机制的实例代码”的完整攻略,包括以下几个方面: 什么是拦截器 在使用axios发起请求时,我们可以使用拦截器对请求进行拦截、修改,以及对响应进行拦截、统一处理等操作。而在vue项目中,我们常使用axios拦截器实现Token的自动刷新机制。 实现Token的自动刷新机制 具体实现步骤如下: (1) 在m…

    Vue 2023年5月28日
    00
  • 基于cornerstone.js的dicom医学影像查看浏览功能

    下面我将为大家分享基于cornerstone.js的dicom医学影像查看浏览功能的完整攻略: 简介 DICOM(Digital Imaging and Communications in Medicine)是医学影像和相关信息的国际标准,它定义了医学影像的格式、传输协议以及元数据等信息,被广泛应用于医学领域。在web应用中,通常需要通过浏览器对DICOM医…

    Vue 2023年5月28日
    00
  • 解决vue下载后台传过来的乱码流的问题

    解决vue下载后台传过来的乱码流的问题可以分为以下几个步骤: 确认后台接口返回的数据是正确编码的,比如UTF-8。 在vue中通过axios等网络请求库获取数据时,设置responseType为’blob’,这样能保证我们得到的数据是二进制的。 通过FileReader读取二进制数据,并转换为String。 创建Blob对象,将转换后的String数据存入该…

    Vue 2023年5月28日
    00
  • Vue.js 2.5新特性介绍(推荐)

    Vue.js 2.5新特性介绍(推荐) Vue.js 2.5是Vue.js的一个重要版本,在它被发布后,带来了很多有用的新特性和重要的改进,使得Vue.js更加易用且强大。在本文中,我们将会介绍Vue.js 2.5中的主要新特性,并且提供一些例子来说明它们的用法。 渐进式渲染(SSR) Vue.js 2.5是一个完全支持服务器端渲染的版本。服务器端渲染(SS…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部