项目中偶尔会遇到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'
![](/qrcode.jpg)
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,真叫人脑壳疼),
1)于是开始理性的分析,首先白屏的原因与静态资源没加载相关,所以优先排查打包后的index.html文件,发现文件里面引用资源的路径为
<script type=text/javascript src=./static/js/js/app.js></script>
会不会是 打包后没带引号引起的?
需要在webpack.prod.conf.js 找到minify参数
讲 removeAttributeQuotes: true 改为 removeAttributeQuotes: false 打包后,已经自动添加了引号
2)通过日志监控发现,部分用户请求了 www.**.com/#/static/js/app.js 路径,静态资源路径异常,
需要在config ->index.js文件里 build 里面 assetsPublicPath 参数 ,路径改为 域名+'/'
assetsPublicPath: 域名+'/' 再次打包部署,等待用户反馈
终于,功夫不负有心人,剩余的小部分白屏用户,也可以正常访问了。开心的不得了~