TL;DR:
- 不是供应链投毒,只是兼容性问题
- 锁定 axios 版本为
~1.6.0
可暂时解决问题
事件经过
axios 1.7 于2024年五月底发布。这个版本的一个重大变化是新增了基于 fetch 的 adapter 并在浏览器中默认启用。这是一个非常巨大的变动,作为 axios 这样广泛使用的库,我觉得以 1.7 这种小版本号发布是非常不合适的。如果当初维护者选择发布 2.0 版本,也就不会有此次问题了,或者说问题影响范围会小得多。
从六月开始,许多开发者开始频繁遇到 iOS 应用中的内嵌 H5 页面白屏,甚至拖累整个 App 崩溃的情况。具体报错为:
Error: unsupported BodyInit type
详情可参见这个 Issue https://github.com/axios/axios/issues/6445
具体原因是 axios 用 ReadableStream
传数据给 fetch API,而 iOS 的 WKWebView 并不支持 ReadableStream
类。这就导致了错误。很显然,这是一个兼容性问题。axios 的维护者并没有针对 iOS WKWebView 进行测试。当然,应用开发者们应该也没有对 iOS 做测试。
解决方案
最快速的解决方案是锁定 axios 版本为 ~1.6.0 并重新编译发布。
开发流程和规范上可以优化的建议是:
- 使用 yarn/pnpm 等能够锁依赖版本的包管理器,减少依赖更新频次
- 避免使用 unpkg/jsdelivery 等公共 CDN 资源,如果要用也务必锁定版本号
- 发布后应该对 iOS 设备进行专门测试(人工/自动化),确保兼容性
发表回复