# Expo Updates、EAS Update 与 Pakta 对比

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

## Expo Updates、EAS Update 与 Pakta 有什么区别？ {#answer}

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

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

## 接入契约对比 {#comparison}

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

客户端与服务端边界见官方 [expo-updates 参考](https://docs.expo.dev/versions/latest/sdk/updates/)，目标路由见 [EAS Update 工作原理](https://docs.expo.dev/eas-update/how-it-works/)。上表描述接入差异，不是完整的功能或价格排名。

## Pakta 能配合 Expo Router 和 EAS Build 吗？ {#expo-build}

可以。[Expo 接入指南](/docs/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}

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

## 如何迁移已有更新流程？ {#migration}

1. 记录当前更新客户端、原生依赖、生效策略以及兼容的二进制版本。
2. 在迁移构建中解除旧客户端对 bundle 加载的接管，不让两个 OTA 客户端同时选择启动 bundle。
3. 按 [Expo 原生配置](/docs/expo)连接根 Provider，重新构建 Release 安装包。
4. 登记安装包，按[首次发布](/docs/publish)向内部渠道投放一处可见变化。
5. 真机验证生效与恢复后，再分发新的原生版本。

EAS 的 `runtimeVersion` 或渠道名称不会自动变成 Pakta 配置。Pakta 渠道写在原生构建中，参见[渠道身份](/docs/channels#identity)。

## 如何比较成本和交付效果？ {#evaluation}

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

了解通用原理，阅读 [React Native OTA 热更新](/docs/react-native-ota-update)；从 CodePush 迁移，阅读[迁移指南](/docs/codepush-alternative)。
