背景:最近在做溯源项目,使用了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.