文档

Expo Updates、EAS Update 与 Pakta 对比

分清 expo-updates 客户端、EAS Update 服务与 Pakta,比较 Expo OTA 接入、运行时定向、EAS Build 和迁移要求。

更新于 2026-09-15

本页内容

Expo Updates、EAS Update 与 Pakta 有什么区别?

expo-updates 是 Expo 的更新客户端库,EAS Update 是与其配合使用的托管服务。Pakta 则使用 rn-updatepakta CLI,具有独立的 OTA 接入协议。支持 Expo 应用,不代表 Pakta 是 Expo Updates 协议服务端,也不代表可以向它执行 eas update

如果现有 App 的 EAS Update 工作流运行良好,可以先评估继续使用。需要 Pakta 的原生包定向、差分交付与发布管理,并且能够重新接入原生 SDK 时,再评估迁移。

接入契约对比

问题Expo Updates / EAS UpdatePakta
谁加载更新?expo-updatesrn-update
如何发布?使用 EAS CLI 向 EAS Update 发布pakta bundle --expo 后执行 pakta publish
如何确定目标?平台、runtime version 和 channel/branch 路由应用、原生渠道、已登记原生版本与兼容检查
能否用于 Expo 原生构建?可以可以,需要接入 Pakta 原生能力
托管服务能否互换?expo-updates 可连接兼容的自建更新服务Pakta 使用自己的 SDK/服务端契约
原生代码变化是否需要重建?需要需要

客户端与服务端边界见官方 expo-updates 参考,目标路由见 EAS Update 工作原理。上表描述接入差异,不是完整的功能或价格排名。

Pakta 能配合 Expo Router 和 EAS Build 吗?

可以。Expo 接入指南在根布局中连接 UpdateProvider,使用随 SDK 提供的 Config Plugin 写入原生渠道,并通过本地 Expo 工具或现有 EAS 生产构建流程生成 Release 包。本项目的 iOS 自动接入要求 Expo 50 或更高版本;仍需验证你的实际 Expo/React Native 组合。

EAS Build 负责生成原生安装包,不要求该包一定使用 EAS Update。接入 Pakta 后,登记准确的安装包,再使用 Pakta CLI 构建和发布更新。

可以用 Expo Go 测试 Pakta 吗?

不可以。Expo Go 不包含 Pakta 的原生接入,需要使用自己的原生 Release 构建。Expo Go 中的 JavaScript 重新加载,不能验证 rn-update 的下载、生效或恢复能力。

如何迁移已有更新流程?

  1. 记录当前更新客户端、原生依赖、生效策略以及兼容的二进制版本。

  2. 在迁移构建中解除旧客户端对 bundle 加载的接管,不让两个 OTA 客户端同时选择启动 bundle。

  3. Expo 原生配置连接根 Provider,重新构建 Release 安装包。

  4. 登记安装包,按首次发布向内部渠道投放一处可见变化。

  5. 真机验证生效与恢复后,再分发新的原生版本。

EAS 的 runtimeVersion 或渠道名称不会自动变成 Pakta 配置。Pakta 渠道写在原生构建中,参见渠道身份

如何比较成本和交付效果?

用同一处应用改动和真实设备测量传输字节、更新延迟、下载失败和恢复表现。结合活跃设备、更新检查次数、带宽、存储和支持需求核对各家当前方案。以 Pakta 价格Expo 价格为现行方案来源,不用假设的补丁节省比例推算费用。

了解通用原理,阅读 React Native OTA 热更新;从 CodePush 迁移,阅读迁移指南