如何解决Taro 3.x H5构建打包后,安卓手机白屏问题

最近公司开始了新的H5项目,考虑到后续可能会上架到多个平台,因此选择了Taro作为开发框架。

期间遇到的一个问题就是生产构建打包如果开启SourceMap,应用运行正常。一旦去掉SourceMap,苹果手机上运行正常,但是安卓手机出现白屏问题。一番debug后,发现是构建打包的代码中存在ES6语法,似乎是安卓手机还不支持,需要转换为ES5语法。

查阅Taro官网文档,发现:

  • @tarojs/components 默认不经 Babel 编译,但 3.2.10 之前没有编译出 ES5 包,请更新到 3.2.10 及以上版本。
  • 默认不编译 node_modules 里的依赖,如有兼容性需求,请手动使用 WebpackChain 修改 babel-loader 的 external 属性。

PS:在官网和Github上找了半天也没有找到使用 WebpackChain 修改 babel-loader 的 external 属性的例子,如果有哪位大佬知道如何配置,麻烦告知一下^_^

无奈之下只能查阅Taro源码了,最终发现除了node_modules 还有包含 taro 和 inversify 的第三方依赖均不经过 babel-loader 处理

截屏2022-02-26 下午3.42.11.png

引起问题的原因找到了,下面就是该如何解决了。

首先,搜索dist目录app.js文件中的superconstlet等ES6语法相关的关键字,找到相应的ES6类

Untitled.png

从上图中,可以看到类名为FluidTransform

找到了类名,接下来就是找到定义该类名的第三方库了。因为本人使用的是VSCode,所以下面就介绍如何使用VSCode的搜索功能找到定义类名的第三方库。

因为VS Code默认会将node_modules以及gitignore文件下的路径排除在其全局搜索范围外,所以需要修改VS Code 搜索设置

  1. 删除VS Code默认的排除node_modules目录搜索

searchSetting.png

  1. 忽略使用.gitigore中的排除搜索设置

searchSetting2.png

接下来就可以在开始搜索node_modules目录下的文件了,从搜索结果中找到导致兼容问题的第三方库

searchResult.png

编辑Taro config目录中的生产环境配置文件prod.js,修改webpack chain,添加babel-loader转换不兼容的第三方库文件

webpackchain.png 重新编译打包,检查dist目录中是否还存在super关键字的ES6语法的类,如果有,则重复上述步骤,直到dist目录下的介绍文件中搜索不到使用了ES6 语法。

Guess you like

Origin juejin.im/post/7068926691162193950