从 CodePush 迁移
编辑页面
帮助从 CodePush 迁移到 EAS Update 的指南。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
本指南说明如何将使用 CodePush 的 React Native 项目迁移为使用 EAS Update,后者提供了许多优势。本文假设你使用的是默认的 React Native 项目结构。有关将棕地原生应用迁移到 EAS Update 的帮助,请参阅在现有原生应用中使用 EAS Update。
要了解 CodePush 和 EAS Update 之间的更多差异,请参阅CodePush 和 EAS Update 之间的概念差异以及 Expo 博客上的不使用 CodePush 该怎么办。
1
确保你的应用使用的是最新的 Expo SDK 版本
要从 CodePush 迁移到 EAS Update,我们建议你使用最新的 Expo SDK 版本。旧版 Expo SDK 和 React Native 版本没有相应说明。虽然你可以根据需要调整说明,以便在应用所使用的旧版 Expo SDK 和 React Native 版本上成功迁移,但对旧版本集成的额外人工支持仅面向企业客户提供(联系我们)。
2
卸载 CodePush
为避免冲突和意外行为,如果你正在使用 EAS Update,建议卸载 CodePush。这是因为你的应用可能会定期从这两项服务获取更新,从而导致问题,尤其是在两项服务使用不同配置时。
通过卸载 react-native-code-push 包,从项目中移除 CodePush SDK:
- npm uninstall react-native-code-push你还需要从 JS 和原生代码中移除 CodePush 引用。有关更详细的说明,请参阅这个GitHub 评论。
3
4
按照“Getting Started”指南操作
EAS Update 入门指南中的说明将引导你在项目中完成 EAS Update 的设置。
5
重新提交你的应用
由于你已将更新提供方从 CodePush 改为 EAS Update,你需要重新构建应用,并将新构建提交到相应的应用商店(Google Play Store 和 Apple App Store),以确保更新机制能够按预期为最终用户工作。
请按照各自商店的指南提交应用的新构建:
成功提交应用后,用户将能够下载并使用集成了 EAS Update 的最新构建。如果你的应用更新行为不符合预期,请验证你的配置。
常见问题
我如何使用 EAS Update 发布强制/关键更新?
CodePush CLI 有一个 --mandatory 标志,可用于发布强制更新。你可以用 EAS Update 实现这一功能,但没有专门的标志。
我如何在更新中包含消息?
CodePush CLI 有一个 --description 标志,可用于在更新中包含消息。你可以在 EAS Update 中使用应用配置里的 extra 字段来实现这一功能。
请参考此示例中的 --message 标志:expo/UpdatesAPIDemo。
我如何像 CodePush 中的 sync() 函数那样,在运行时切换正在使用的 'deployment'?
可以使用 Updates.setUpdateURLAndRequestHeadersOverride() 实现。更多信息请参阅在运行时覆盖更新配置指南。
我如何通过 EAS Update 处理不同环境(例如 staging 和 production)?
使用 EAS Update 时,你可以通过 channels 和 branches 来管理不同环境和发布。 了解更多。
我如何使用 EAS Update 回滚更新?
你可以使用 eas update:rollback 回滚更新。更多信息请参阅回滚到先前更新指南。
我如何逐步发布 EAS Update 更新?
EAS Update 支持多种逐步发布更新的策略,因此你可以选择最适合你需求的方法。 了解更多。
我如何直接控制更新何时下载并应用?
有关下载和应用更新的不同策略,请参阅下载更新指南,例如在应用运行时检查更新,甚至在后台时使用 Updates.checkForUpdateAsync() 检查更新。
EAS Update 是否支持端到端代码签名?
是的,EAS Update 支持端到端代码签名。EAS Production 和 Enterprise 套餐订阅者可用。更多信息请参阅代码签名指南。
我还应该了解什么?
- Expo Orbit:适用于 macOS、Windows 和 Linux 的桌面启动器应用。你可以通过它从网站上一键启动更新,以及使用其他功能。
- 你可以在 EAS 网站上监控更新的采用情况。了解更多。你也可以在网站上发布和回滚更新。
- 你可以使用 EAS Update 实现类似 Web 的预览工作流。 了解更多。
- 使用 EAS 创建的每个更新和构建都关联一个fingerprint。你可以通过网站 UI 或使用
eas fingerprint:compare来比较这些 fingerprint,查看应用原生运行时在构建和更新之间发生了哪些变化,以便理解构建/更新兼容性,并决定何时升级runtimeVersion。
CodePush 和 EAS Update 之间的概念差异
CodePush 和 EAS Update 都允许你向应用的 JavaScript 代码发送热修复,但它们采用的方式略有不同,因此当迁移到 EAS Update 时,你可能需要调整发布流程。
更新在 stream 中的组织方式差异
CodePush 为部署使用单一更新流。这意味着你可以将一个构建指向某个 deployment,它会从那里拉取更新。如果你想更改某个构建所针对的 deployment,可以在运行时通过 JavaScript API 实现。
EAS Update 有多个更新流——一个对应你的源代码控制分支(称为 branches),另一个称为 channels,它们指向 branches。channels 和 branches 之间的映射在服务端处理,并且一个 channel 可以针对每个 runtime version 指向不同的 branches(此外,还可以表达更高级的逻辑,例如支持增量发布)。构建并不直接关联 branches,而是关联 channels。每个构建都指向单个 channel,该 channel 在构建时设置,且不能在运行时修改。这样做的原因是,它能确保某些 branches(例如:development、staging)不会自动发布到生产环境——你的预览更新不会发送给生产用户。这有助于你区分 EAS Update 的两种主要用途:预览和生产热修复。
运行时如何选择更新的差异
CodePush 和 EAS Update 之间的一个关键区别,会影响你的发布流程:在 CodePush 中,客户端在运行时控制目标更新 deployment,而在 EAS Update 中,这由服务端通过将 channels 映射到 branches 来控制。这意味着你不能在使用 EAS Update 的应用中加入代码,让它根据运行时条件(例如当前用户角色,如向员工分发 beta 版本)加载不同的更新流——它只会加载 EAS Update 服务器上映射到相应 channel 的 branch(例如 production 或 staging)。
在 CodePush 中,运行时控制目标 deployment 的能力通常用于 staging 环境,以便非技术相关方能够从 Google Play Beta / TestFlight 上的单个构建中测试功能。EAS Update 对应的当前替代方案是使用开发构建。我们目前正在努力提供一种使用发布构建实现这一点的方法。