问题景象
我的项目应用vue/cli3脚手架搭建的前端我的项目,vue版本为2.6.10。
browserslist的配置如下:
[ "> 1%", "last 2 versions"]
但开发环境的IE11关上显示白屏,F12关上显示:
剖析过程
5306行显示 "./node_modules/_debug@4.1.1@debug/src/browser.js"这个门路报错,因为eval()蕴含的代码中有ES6的语法,IE不反对,查了网上很多材料都说应用babel-polyfill来解决。
景象一:IE不反对ES6语法
- Vuex requires a Promise polyfill in this browser
- "“Promise”未定义"
以上景象为IE不反对Promise,即不反对ES6语法。呈现IE白屏和报SCRIPT1002谬误的大都是此起因。以后解决起来也比较简单,网上大部份资源都能够找到解决方案,就是应用babel-polyfill。
首先装置babel-polyfill
npm install --save-dev babel-polyfill
而后在babel.config.js批改presets,内容如下:
// presets: [["@vue/app", {useBuiltIns: "entry",}]],// 此为vue/cli3presets: [["@vue/cli-plugin-babel/preset", {useBuiltIns: "entry",}]],// 此为vue/cli4
解决办法一
main.js的第一行引入:
import 'babel-polyfill';复制代码
解决办法二:
vue cli官网举荐应用,前提是package.json装置了core-js:
import 'core-js/stable';import 'regenerator-runtime/runtime';复制代码
解决办法三:
在vue.config.js里增加如下代码:
configureWebpack: config => { config.entry.app = ["babel-polyfill", "./src/main.js"]; },复制代码
景象二:第三方插件引入导致
因为我的项目应用了长连贯库socket.io-client和vue-socket.io-extended,在main.js是中应用办法是:
import VueSocketIOExt from 'vue-socket.io-extended';import io from 'socket.io-client';const socket = io(process.env.VUE_APP_IO_URL);Vue.use(VueSocketIOExt, socket);复制代码
我把这四行代码正文掉之后神奇的IE不白屏了,但业务须要IE11是不能放弃长连贯的,通过尝试发现是socket.io-client这个插件在应用import引入时导致的问题。
解决办法一:
1、将main.js调整为:
import VueSocketIOExt from 'vue-socket.io-extended';const socket = io(process.env.VUE_APP_IO_URL);Vue.use(VueSocketIOExt, socket);复制代码
2、socket.io-client改为在public/index.html文件head中引入:
<script src="https://cdn.bootcdn.net/ajax/libs/socket.io/2.3.0/socket.io.slim.js"></script>复制代码
解决办法二:
保留main.js对第三方插件的引入不变,只须要在vue.config.js的transpileDependencies增加要显示依赖的插件即可:
transpileDependencies:['socket.io-client'],// transpileDependencies:['*'],复制代码
transpileDependencies的作用是:默认状况下 babel-loader
会疏忽所有 node_modules
中的文件。如果你想要通过 Babel 显式转译一个依赖,能够在这个选项中列出来。
景象三:本地环境失常,但生产环境仍旧白屏
发现引入一个多语言文件时,JSON没有应用适合的逗号导致,如下:
当我我第8行的逗号去掉后,奇观般失常了。
另外,如果前端工程引入的文件不在工程的根目录下,也会呈现这种状况。