• 解决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.

  • 相关阅读:
    Windows批处理方式实现MySQL定期自动备份多个数据库
    MySQL数据库中库、表名、字段的大小写问题
    使用modbus4j通过串口解析modbus协议(java)
    mybatis —— 动态sql之if条件判断各种使用方式
    Mysql 获取表的comment 字段
    [转载]如何判断数据库,表或字段是否存在
    设计模式目录
    图片上传及访问
    实现第一个API
    ListView 源码解析
  • 原文地址:https://www.cnblogs.com/tizi/p/13632573.html
Copyright © 2020-2023  润新知