axios 1.7 致 iOS 应用故障

TL;DR:

  1. 不是供应链投毒,只是兼容性问题
  2. 锁定 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 并重新编译发布。

开发流程和规范上可以优化的建议是:

  1. 使用 yarn/pnpm 等能够锁依赖版本的包管理器,减少依赖更新频次
  2. 避免使用 unpkg/jsdelivery 等公共 CDN 资源,如果要用也务必锁定版本号
  3. 发布后应该对 iOS 设备进行专门测试(人工/自动化),确保兼容性


📅

📁

🏷️

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据