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

yizhihongxing

当使用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 前端导出后端返回的excel文件方式

    Vue 前端导出后端返回的 Excel 文件是一个常见的需求,以下是一种完整的实现攻略。 确认后端返回的 Excel 文件格式 在实现 Vue 前端导出后端返回的 Excel 文件之前,我们需要先确认后端返回 Excel 文件的格式。通常情况下,我们可以使用两种方式来返回 Excel 文件: 1. 直接返回二进制流 后端直接将 Excel 文件的二进制流作为…

    Vue 2023年5月27日
    00
  • 想到头秃也想不到的Vue3复用组件还可以这么hack的用法

    当我们在开发Vue应用时,需要多次使用同样的组件,此时我们可以使用组件复用来简化代码并提高开发效率。Vue3提供了更为灵活的组件复用方式,下面就是Vue3复用组件的hack用法攻略。 局部注册组件 我们可以在Vue模板中使用局部注册组件的方式来重复使用同一个组件,这种方式只有在当前组件内部可用。 <template> <div> &l…

    Vue 2023年5月28日
    00
  • Vue 创建组件的两种方法小结(必看)

    Vue 创建组件的两种方法小结 在 Vue.js 中,有两种方式来创建组件,分别为注册全局组件和局部组件。下面我们进行详细讲解。 全局组件 在全局范围注册一个组件,使用 Vue.component 方法,内部是一个对象,该对象包括 template,data,methods 等属性。 <template> <div> <h1&g…

    Vue 2023年5月28日
    00
  • 代号为Naruto的Vue 2.7正式发布功能详解

    代号为Naruto的Vue 2.7正式发布功能详解 概述 Naruto是 Vue 官方发布的最新版本,它是 Vue.js 2.x 系列的最后一个版本,也是Vue最后一个大版本更新,主要目的是为了真正实现”渐进式框架”的理念,其中包含了一些重大的变化和新功能。 在这篇文章中,我们将介绍Naruto的一些最新功能,以及如何在Vue应用程序中使用它们。 Compo…

    Vue 2023年5月28日
    00
  • 使用webpack手动搭建vue项目的步骤

    使用webpack手动搭建vue项目的步骤可能有点繁琐,但却是从根本上了解vue和webpack的运行机制、优化和调试的重要一步。 以下是手动搭建vue项目的完整攻略: 步骤1:新建项目 首先,我们需要在本地新建一个项目文件夹并打开命令行,使用npm初始化项目: npm init 这将在项目文件夹中创建一个package.json文件,其中包含了我们需要的依…

    Vue 2023年5月28日
    00
  • 一篇文章告诉你如何编写Vue插件

    如何编写Vue插件 Vue插件是为Vue应用程序添加功能的有用工具。Vue插件可以提供全局组件、自定义指令、实例方法等各种功能,使得Vue应用变得更为灵活和可扩展。 本文将介绍如何编写一个基本的Vue插件,并提供两条示例说明。我们将学习如何创建Vue插件、定义组件、定义指令和在Vue应用程序中使用插件。 创建Vue插件 创建一个Vue插件的最简单方法是定义一…

    Vue 2023年5月27日
    00
  • JS实现调用本地摄像头功能示例

    下面是关于JS实现调用本地摄像头功能的完整攻略: 1、需求分析 在Web前端应用中,有时需要使用到调用本地摄像头的功能。比如视频聊天、视频录像等等。因此,我们需要学习如何使用JS来调用本地摄像头,并将摄像头拍摄的视频数据展示在Web页面上。 2、使用getUserMedia实现调用本地摄像头 HTML5提供了一个功能强大的API——getUserMedia,…

    Vue 2023年5月28日
    00
  • vue组件生命周期钩子使用示例详解

    Vue组件生命周期钩子使用示例详解 在Vue组件的生命周期中,每个实例会从创建、挂载、更新、销毁四个不同的阶段。在这些不同的阶段中,我们可以通过使用生命周期钩子函数来控制组件的行为。本文将详细讲解Vue组件生命周期钩子函数的使用方法,并通过示例代码介绍其具体应用。 Vue组件生命周期钩子函数 Vue组件生命周期可以分为8个阶段,每个阶段都有对应的生命周期钩子…

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