zoukankan      html  css  js  c++  java
  • 解决vue(vue-cli3、vue-cli2)项目在ie浏览器中打开空白

    背景:最近在做溯源项目,使用了vue-cli3构建的项目,但是在IE中打开空白,其他浏览器打开正常,为了解决此问题,安装了babel-polyfill,在main.js文件中通过import "babel-polyfill"引入了该文件,但还是没有解决此问题,搜索了好久,终于找到了一篇文章解决了我的问题,很激动,很感谢,附上原文章https://blog.csdn.net/Maggie_01/article/details/101159448,自己也做下笔记。

    空白原因

    浏览器不兼容ES6语法,需要将代码中的ES6语法通过插件的方式进行转换,而且由于babel会忽略node_modules,导致依赖包中的ES6语法无法被转换

    解决方法:

    步骤一:安装相关插件

    npm install babel-polyfill es6-promise --save

    步骤二:main.js中引入,并配置

    import 'babel-polyfill'
    import Es6Promise from 'es6-promise'
    require('es6-promise').polyfill()
    Es6Promise.polyfill()

    注意:针对vue-cli2和vue-cli3,步骤一、步骤二相同,下面步骤有区分

    步骤三:vue-cli2项目,创建一个.babelrc文件

    {
      "presets": [
        "es2015" ,
        "stage-2"
      ],
      "plugins": [
        "transform-vue-jsx", 
        "transform-runtime",
        ["import", [{ "libraryName": "vant", "style": true }]]
      ],
    }

    步骤四:vue-cli2项目,更改webpack.base.conf.js文件配置

    const path = require('path')
    
    function resolve (dir) {
      return path.join(__dirname, '..', dir)
    }
    
    module.exports = {
      context: path.resolve(__dirname, '../'),
      entry: {
        app: ["babel-polyfill", "./src/main.js"]
        // app: './src/main.js'
      },
      module: {
        rules: [
          {
            test: /.js$/,
            loader: 'babel-loader',
            // include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
            query: {
              presets: ['es2015']
            },
            include: [
              resolve('src'), 
              resolve('static/js'), 
              resolve('test'), 
              resolve('node_modules/webpack-dev-server/client'),
              resolve('node_modules/vant')
            ]
          },
        ]
      }
    }

    步骤三:vue-cli3项目,新建一个babel的配置文件,babel.config.js

    var plugins = [];
    if (['production', 'prod'].includes(process.env.NODE_ENV)) {
      plugins.push("transform-remove-console")
    }
    
    module.exports = {
      presets: [
        [
          "@vue/app",
          {
            "useBuiltIns": "entry",
            polyfills: [
              'es6.promise',
              'es6.symbol'
            ]
          }
        ]
      ],
      plugins: plugins
    }

    transform-remove-console是用来在打包之前删除控制台打印,不需要的可以去掉

    步骤四:vue-cli3项目,更改vue.config.js

    const path = require('path');
    
    function resolve(dir) {
      return path.join(__dirname, '.', dir);
    }
    
    module.exports = {
      ...  // 其他配置
      publicPath: process.env.NODE_ENV === "production" ? "./" : "./",
      // 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。
      // 如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来
      transpileDependencies: [],
      chainWebpack: config => {
        config.module.rule('compile')
          .test(/.js$/)
          .include
          .add(resolve('src'))
          .add(resolve('test'))
          .add(resolve('node_modules/webpack-dev-server/client'))
          .add(resolve('node_modules'))
          .end()
          .use('babel')
          .loader('babel-loader')
          .options({
            presets: [
              ['@babel/preset-env', {
                modules: false
              }]
            ]
          });
      }
    }

    重启项目,至此因为低版本不支持es6导致页面空白的问题解决了。

    说明:vue-cli2项目的方法我没有测试,因为我的项目是vue-cli3.

  • 相关阅读:
    Poj 1742 Coins(多重背包)
    Poj 2350 Above Average(精度控制)
    求二进制数中1的个数
    Poj 1659 Distance on Chessboard(国际象棋的走子规则)
    Poj 2411 Mondriaan's Dream(压缩矩阵DP)
    Poj 2136 Vertical Histogram(打印垂直直方图)
    Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
    poj 2390 Bank Interest(计算本利和)
    Poj 2533 Longest Ordered Subsequence(LIS)
    Poj 1887 Testing the CATCHER(LIS)
  • 原文地址:https://www.cnblogs.com/tizi/p/13632573.html
Copyright © 2011-2022 走看看