详解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实现自定义公共组件及提取公共的方法

    下面我为您详细讲解“Vue 实现自定义公共组件及提取公共的方法”的完整攻略。 1. 自定义公共组件 1.1 创建与引入组件 Vue 框架提供了组件化的机制,用户可以通过自定义组件的方式进行开发。下面是一个简单的自定义组件的例子,我们可以创建一个 HelloWorld 组件: <template> <div> <h1>{{ …

    Vue 2023年5月28日
    00
  • Vue生命周期详解

    Vue生命周期详解 Vue.js 是一个 MVVM 框架,在组件渲染过程中,每个组件都有自己的生命周期。这里将详细介绍 Vue 组件的生命周期函数。 Vue 组件生命周期可以分为四个阶段: 创建阶段 create 挂载阶段 mount 更新阶段 update 销毁阶段 destroy 创建阶段 create 在创建阶段,Vue 组件将从组件配置对象的初始化属…

    Vue 2023年5月28日
    00
  • Vue2.0实现自适应分辨率

    下面我来详细讲解“Vue2.0实现自适应分辨率”的完整攻略。 1. 什么是自适应分辨率? 自适应分辨率指随着设备分辨率的变化而自动适应显示效果,实现在不同分辨率设备上呈现相同的视觉效果。 2. 如何实现自适应分辨率? 实现自适应分辨率的关键是通过响应式设计方法,在不同尺寸的设备上渲染相应的页面视图。Vue2.0框架提供了多种方法实现自适应分辨率,包括: 2.…

    Vue 2023年5月28日
    00
  • 详解Axios统一错误处理与后置

    详解Axios统一错误处理与后置的完整攻略 概述 Axios是一个功能强大的HTTP请求库,它支持浏览器和Node.js环境。在实际开发中我们经常需要发起网络请求,而Axios不仅在API设计上极其灵活,而且对于统一的错误处理和请求后置处理提供了方便的功能。 本文将详细讲解如何使用Axios实现统一的错误处理和请求后置处理,本文涵盖以下内容: 错误处理的需求…

    Vue 2023年5月28日
    00
  • JS 图片压缩原理与实现方法详解

    JS 图片压缩原理与实现方法详解 原理介绍 图片压缩是指在保证图片质量的前提下,通过降低图片的分辨率、压缩比率等方式来减小图片的体积,从而达到优化页面加载速度的目的。在网页中,对于图片的大小不同,会直接影响页面的加载速度,特别是对于移动端的用户体验更加重要。 在实现 JavaScript 图片压缩的时候,常见的有两种方式: HTML5 的 Canvas + …

    Vue 2023年5月28日
    00
  • 在vue中把含有html标签转为html渲染页面的实例

    在Vue中,如果需要将包含HTML标签的内容正确渲染到页面上,可以使用v-html指令。使用v-html指令,需要注意几点: 潜在的安全风险: 由于v-html指令能够将包含HTML标签的字符串直接渲染到页面上,因此可能会存在恶意代码注入的风险,开发者需要确保渲染的内容是可信的,避免出现安全漏洞。 性能问题: 在使用v-html指令时,Vue会将指令表达式的…

    Vue 2023年5月27日
    00
  • Vue (Vuex)中 store 基本用法

    Vue 提供了 Vuex 这个基于 Flux 架构的状态管理工具。使用 Vuex,我们可以在应用程序的任何组件中非常方便的存储和更新应用的状态数据。这里我们来讲解一下 Vuex 中 store 的基本用法,包括 state、getters、mutations 和 actions 四个部分。 创建 store 我们需要先创建一个 Vuex.store,这个 s…

    Vue 2023年5月27日
    00
  • 利用Vue构造器创建Form组件的通用解决方法

    那么现在开始讲解“利用Vue构造器创建Form组件的通用解决方法”的攻略。 为什么要利用Vue构造器创建Form组件 在Vue的组件开发过程中,我们经常会遇到需要创建Form表单的情况。虽然Vue提供了v-model和表单元素等一系列让表单操作变得方便的指令,但是对于大型的表单,尤其是需要复用的表单而言,我们发现通过模板编写的方式重复性非常高,会导致代码的冗…

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