原文链接:https://blog.csdn.net/superkm/article/details/83721633
项目中偶尔会遇到vue 第一次打开白屏现象,针对这个问题,找了不同环境下的处理方法,留个纪念
1. ios10 出现白屏
原因是由于ios 10中Safari中错误描述如下:当你定义一个与参数同名的for循环迭代变量时,我们错误地认为这是一个语法错误。解决方法如下:
- 进入
build
文件夹; - 找到
webpack.prod.conf.js
文件; - 在
UglifyPlugin
的定义里添加关于mangle
的选项,使它变成下面这个样子
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
},
mangle: {
safari10: true
}
},
sourceMap: config.build.productionSourceMap,
parallel: true
}),
2. Swiper
插件导致白屏
解决方法是在项目根目录下新建一个文件vue.config.js,在里面添加如下语句:
module.exports = {
chainWebpack: config => {
config.rule('js').include.add(/node_modules\/(dom7|swiper)\/.*/)
}
}
3. npm run build打包页面空白
我们会发现页面head中引用的js和css文件是出现了路径错误,这里修改如下:
解决位置:config/index.js文件:把assetsPublicPath: '/'改为assetsPublicPath: './'
build: {
assetsPublicPath: './',
}
4. 升级vue2+部分手机访问出现页面空白
npm run dev后可能出现无法加载到路由模板的信息。
解决位置:config/index.js文件:把 devtool: '#eval-source-map' 改为devtool:'inline-source-map'
5. 升级vue2+IP访问页面空白
默认只能通过localhost或者127.0.0.1才能访问,如果使用本机的Ip地址会出现无法访问到的情况。
解决位置:config/index.js文件:把config/index.js中“host” 配置为“0.0.0.0”就可以解决,或者设置为你电脑的IP地址也行:
6. Vue在IE、低版本Android显示空白问题
这是由于IE对promise的支持不好,我们需要安装:babel-polyfill和es6-promise:
npm install babel-polyfill
npm install es6-promise
然后在main.js文件中引用:
import 'babel-polyfill'
import Vue from 'vue'
import Es6Promise from 'es6-promise'
Es6Promise.polyfill()
最后 build/webpack.base.conf.js 文件中配置如下:
module.exports = {
entry: {
app: ["babel-polyfill", "./src/main.js"]
}
};
博主以上方法均试过,但依旧有小部分机型手机打开为白屏(根据市场用户使用情况,遇到的白屏均为小部分iphone,真叫人脑壳疼)
-
于是开始理性的分析,首先白屏的原因与静态资源没加载相关,所以优先排查打包后的index.html文件,发现文件里面引用资源的路径为
<script type=text/javascript src=./static/js/js/app.js></script>
需要在
webpack.prod.conf.js
找到minify
参数将
removeAttributeQuotes: true
改为removeAttributeQuotes: false
打包后,已经自动添加了引号 -
通过日志监控发现,部分用户请求了
www.**.com/#/static/js/app.js
路径,静态资源路径异常,需要在
config ->index.js
文件里build
里面assetsPublicPath
参数 ,路径改为域名+'/'
assetsPublicPath: 域名+'/'
再次打包部署,等待用户反馈
补充:
- 如果是测试环境出现这种问题,看一下是否引入了vconsole,虽然vconsole很好用,但是确实也会引发白屏。
- 如果使用以上办法还是得不到解决,如果同时又引入了swiper,那么请删除swiper,移动端可以用vant框架写轮播。
评论区