完蛋了,H5项目从vue2迁移到vue3白屏了

3,334 阅读2分钟

背景

公司的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,打开本地项目,果不其然,页面白屏

合并.jpeg

根据这些报错,真的无从下手,那就一个模块一个模块注释代码进行排查吧,逐渐报错提示越来越明显,最终将其定位在对所有收发消息进行处理的闸口,在这里进行反复测试后发现是不能对props直接操作,需要进行深拷贝。

ios11.4错误代码改正合并.jpg

修改完之后在11.4以上确实正常了,打包到预发,大致测了下一切正常,突然熟悉的白屏又出现了,这次出现在iphone x11.0.1上,但本地在11.0上是可以打开的呀,打完包发预发就不能打开,确定问题是出在打包过程中。

错误截图:

ios11.0白屏报错.jpg

经查,发现是项目中使用了...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白屏报错:

ios10白屏报错.jpeg

最终的解决目标就是把当前代码和外部依赖包中的所有ES6语法转化为低语法

那就是来通过配置babel来处理了,修改如下:

未命名42.jpeg

新增插件:

新增插件.png

这样就完事了!

参考文档:

segmentfault.com/a/119000002…

kmanong.top/kmn/qxw/for…

blog.csdn.net/weixin_4494…