开始使用 EAS Update

编辑页面

了解如何开始进行在项目中配置和使用 EAS Update 所需的设置。


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

设置 EAS Update 可让您立即向用户推送他们需要的重要错误修复和改进。本指南将带您完成在新项目或现有项目中设置 EAS Update 的过程。

如果您计划将 EAS Update 与 EAS Build 一起使用,我们建议您在继续此处之前先阅读 EAS Build 设置指南。不过,您也可以在不使用任何其他 EAS 服务的情况下使用 EAS Update

前置条件

Expo 用户账户

EAS Update 对任何拥有 Expo 账户的人都可用,无论您是否付费使用 EAS 或使用免费计划。您可以在 expo.dev/signup 注册。

付费订阅者可以向更多用户发布更新,并使用更多带宽和存储空间。了解更多不同计划及其权益,请访问 EAS 定价

一个 React Native 项目

还没有项目?没问题。创建一个可供本指南使用的 “Hello world” 应用非常快速且简单。

运行以下命令创建新项目:

Terminal
npx create-expo-app@latest my-app --template default@sdk-55

EAS Update 也适用于使用 npx create-react-native-appnpx react-nativeignite-cli 以及其他项目脚手架工具创建的项目。

您的项目必须使用 Expo CLI 并扩展 Expo Metro Config

如果您已经使用 npx expo [command] 运行项目(例如,您是通过 npx create-expo-app 创建的),那么一切就绪。

如果您的项目中还没有 expo 包,请运行下面的命令进行安装,并 选择使用 Expo CLI 和 Metro Config

Terminal
npx install-expo-modules@latest

如果命令失败,请参考 安装 Expo 模块 指南。

您的项目必须使用 registerRootComponent 函数,而不是 registerComponent

如果您是通过 npx create-expo-app 创建项目的,或者您在应用中根本没有调用 registerRootComponent(例如,由 Expo Router 处理),那么一切就绪。以下内容适用于使用其他工具创建的项目,例如 React Native Community CLI。

我们建议使用 EAS Update 的应用采用 Expo 的 registerRootComponent 而不是 React Native 的 registerApplication。这将确保 Expo 能够配置 React Native 加载资源,例如更新中包含的图片。如果您不使用 registerRootComponent,您可能会发现发布构建中无法使用这些资源。

在使用 React Native Community CLI 创建的简单应用中,差异如下:

index.js
1import {AppRegistry} from 'react-native';
2import {name as appName} from './app.json';
1import {registerRootComponent} from 'expo';
32import App from './App';
4
5AppRegistry.registerComponent(appName, () => App);
3export default registerRootComponent(App);

完成该更改后,请将您的 MainActivityAppDelegate 更新为使用模块名 "main",而不是您的应用名称。

1

安装最新的 EAS CLI

EAS CLI 是您在终端中与 EAS 服务交互时使用的命令行应用。要安装它,请运行以下命令:

Terminal
npm install --global eas-cli

您也可以使用上述命令检查是否有新版本的 EAS CLI 可用。我们建议您始终保持为最新版本。

我们建议全局安装包时使用 npm 而不是 yarn。您也可以改用 npx eas-cli@latest。请记住,在文档中凡是提到 eas 的地方,都用它来替代。

2

登录您的 Expo 账户

如果您已经通过 Expo CLI 登录了 Expo 账户,可以跳过本节所述步骤。如果还没有,请运行以下命令登录:

Terminal
eas login

您可以通过运行 eas whoami 来检查自己是否已登录。

3

配置您的项目

在终端中进入您的项目目录并运行以下命令:

Terminal
# 使用 EAS Update 初始化您的项目
eas update:configure
这个命令会做什么?

eas update:configure 命令会使用 runtimeVersionupdates.url 属性更新您的 app.json 文件,并在您的项目之前未使用任何 EAS 服务时添加 extra.eas.projectId 字段。

当您在不使用 CNG 的项目中运行 eas update:configure 时,您会在原生项目中看到以下更改:

Android

android/app/src/main/AndroidManifest.xml 文件中,您会看到以下新增内容:

android/app/src/main/AndroidManifest.xml
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://u.expo.dev/your-project-id"/> <meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="@string/expo_runtime_version"/>

EXPO_UPDATE_URL 的值应包含您的项目 ID。

android/app/src/main/res/values/strings.xml 中,您会在 resources 对象里看到 expo_runtime_version 字符串条目:

iOS

ios/project-name/Supporting/Expo.plist 中,您会看到以下新增内容:

ios/project-name/Supporting/Expo.plist
<key>EXUpdatesRuntimeVersion</key> <string>1.0.0</string> <key>EXUpdatesURL</key> <string>https://u.expo.dev/your-project-id</string>

EXUpdatesURL 的值应包含您的项目 ID。

如果您使用 Xcode 创建项目构建,请确保 已将 Expo.plist 文件添加到您的 Xcode 项目中

4

配置更新频道

构建中的 channel 属性可让您将更新指向特定类型的构建。例如,它允许您向预览构建发布更新,而不影响生产环境部署。

如果您正在使用 EAS Buildeas update:configure 会在 eas.json 中为 previewproduction 配置文件设置更新的 channel 属性。如果您使用不同的配置文件名称,请手动设置它们。

eas.json 中的频道配置示例
eas.json
{ "build": { "preview": { "channel": "preview" // ... }, "production": { "channel": "production" // ... } } }

如果您没有使用 EAS Build,则需要在 app.json 或原生项目中配置 channel,具体取决于您是否使用 CNG。当您为不同环境创建构建时,需要修改 channel,以确保构建从正确的 channel 拉取更新。更多信息请参阅 将 EAS Update 作为独立服务使用

在 app.json 中配置更新频道

如果您使用 Continuous Native Generation(CNG),则可以在 app.json 中使用 updates.requestHeaders 属性配置 channel:

app.json
{ "expo": { %%placeholder-start%%... %%placeholder-end%% "updates": { %%placeholder-start%%... %%placeholder-end%% "requestHeaders": { "expo-channel-name": "your-channel-name" } %%placeholder-start%%... %%placeholder-end%% } %%placeholder-start%%... %%placeholder-end%% } }

该配置将在您下次运行 npx expo prebuild 时生效。

在 Android 原生项目中配置更新频道

AndroidManifest.xml 中,您需要添加并将 your-channel-name 替换为与您的项目匹配的频道:

android/app/src/main/AndroidManifest.xml
<meta-data android:name="expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY" android:value="{&quot;expo-channel-name&quot;:&quot;your-channel-name&quot;}"/>
在 iOS 原生项目中配置更新频道

Expo.plist 中,您需要添加以下内容,并将 your-channel-name 替换为与您的项目匹配的频道:

ios/project-name/Supporting/Expo.plist
<key>EXUpdatesRequestHeaders</key> <dict> <key>expo-channel-name</key> <string>your-channel-name</string> </dict>
如果您使用 Xcode 创建项目构建,请确保 已将 Expo.plist 文件添加到您的 Xcode 项目中

5

为项目创建构建

您需要为 Android 或 iOS 创建一个构建。我们建议先使用 preview 构建配置文件创建构建。请参阅 创建您的第一个构建,了解如何开始并为您的设备或模拟器设置 内部分发

一旦您的设备或模拟器上运行了构建,就可以准备发送更新了。

6

在本地进行更改

创建构建后,您就可以开始迭代项目了。使用以下命令启动本地开发服务器:

Terminal
npx expo start

然后,对项目的 JavaScript、样式或图片资源进行所需更改。

7

发布更新

发布更新可以实现:

要发布包含项目更改的更新,请使用 eas update 命令,并指定 channel 名称、用于描述更新的 message,以及用于指定要使用哪个 EAS 环境变量--environment 标志(SDK 55 及更高版本中必需):

Terminal
eas update --channel [channel-name] --message "[message]" --environment [environment-name]
更新发布是如何工作的?

当您使用 eas update 命令发布更新时,它会生成一个新的更新 bundle 并将其上传到 EAS 服务器。channel 名称用于定位正确的分支,以便从其他更新分支发布新更新。它类似于 Git 提交的工作方式,即每个提交都位于某个 Git 分支上。

例如,当应用设置为从 preview channel 拉取更新时,您可以使用 eas update --channel preview 为该构建发布更新。这将会在 preview channel 上创建一个分支(默认也称为 preview)。在后台,该命令会运行 npx expo export 以生成 dist 目录并创建本地更新 bundle。此更新 bundle 会上传到 EAS Update 服务器。

关于 EAS Update 工作原理的深度指南

深入了解 EAS Update 的工作原理。

8

测试更新

更新上传到 EAS Update 后,您可以使用以下方法之一来测试更新:

  • 开发构建 中使用 Extensions 标签页加载更新。
  • 使用 Expo Orbit 在开发构建中安装并启动更新。
  • 结合 Updates APIapp config 实现自定义策略,以编程方式在应用中加载更新。
  • 通过强制关闭并重新打开应用的发布构建最多两次,手动测试更新,以便下载并应用更新。非开发构建(预览或生产)的更新会在应用启动并请求任何新更新时自动在后台下载到设备。更新会在下载完成且应用重新启动后应用。
有些地方没有正常工作?

如果您的应用没有按预期更新,请查看 调试指南,了解用于验证配置的技巧。

下一步

预览更新

了解如何通过共享更新用于 QA 和测试来快速迭代。

部署更新

了解在使用 EAS Update 时适用于你的项目的不同部署模式。