背景
公司的H5项目要从vue2升级到vue3,前期做了很多调研,衡量利弊之后,最终没有进行大改,只是做了迁移,参照vue2迁移文档 脚手架也进行升级。
现象
页面直接白屏,此现象出现在ios10,11,12上,在高版本ios和安卓上没有此类反馈
原因
1、vue2迁移到vue3中属性兼容问题,vue3中的属性props在ios低系统下不能对其直接操作
2、ES6语法兼容问题,使用的第三方库的包中使用了...扩展运算符,然后因为第三方的包默认是没有被Babel处理过的,所以在不支持...的iOS 10以下的系统上就出现了白屏
解决过程:
初次反馈有问题的操作系统是 操作系统:ios11 、ios12中某些版本 我们用Xcode模拟器打开iPhone8 11.4,打开本地项目,果不其然,页面白屏
根据这些报错,真的无从下手,那就一个模块一个模块注释代码进行排查吧,逐渐报错提示越来越明显,最终将其定位在对所有收发消息进行处理的闸口,在这里进行反复测试后发现是不能对props直接操作,需要进行深拷贝。
修改完之后在11.4以上确实正常了,打包到预发,大致测了下一切正常,突然熟悉的白屏又出现了,这次出现在iphone x11.0.1上,但本地在11.0上是可以打开的呀,打完包发预发就不能打开,确定问题是出在打包过程中。
错误截图:
经查,发现是项目中使用了...ES6扩展运算符,然后ios11.0系统不支持这个运算符;然后在babel.config.js 中添加
{
... // 省略原来的配置内容
"plugins": ["@babel/plugin-proposal-object-rest-spread"] //对象rest、spread语法处理
}
打包在11.0 11.2上试过后没有问题,以为要解放了,谁知道。。。,
测试中发现在ios10.3上还是白屏,看这个报错没有任何头绪,网上也没有这个报错的任何消息,那就搜“ios10白屏”,搜索结果大部分都是说编译后ES6语法未被转化为ES5,结合本地正常,预发环境报错的现象来看,这个报错应该是也是由于ios10不支持ES6语法,并且在打包时未把依赖包中的高语法转为低语法导致的。
ios10白屏报错:
最终的解决目标就是把当前代码和外部依赖包中的所有ES6语法转化为低语法
那就是来通过配置babel来处理了,修改如下:
新增插件:
这样就完事了!
参考文档: