EAS 中关于环境变量的常见问题

编辑页面

关于 EAS 中环境变量的常见问题。


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

本页面介绍了 EAS 中关于环境变量的常见问题。

在我的 EAS 项目中使用环境变量,推荐的工作流程是什么?

在你的 EAS 项目中高效使用环境变量的一种可能方式是:

使用正确的可见性设置

确保将环境变量的可见性设置为合适的级别。避免将过度的 secret 可见性设置给在应用 JavaScript 代码中使用,或用于解析应用配置的 EXPO_PUBLIC_ 变量。请注意,具有 secret 可见性的环境变量无法在 EAS 服务器之外读取,也无法为了开发而拉取到本地,或在更新时用于打包应用的 JavaScript 代码。

将 .env 文件添加到 .gitignore

为了避免在云端任务中出现令人困惑的覆盖,并泄露敏感信息,请将 .env 文件添加到你的 .gitignore 文件中。

eas update 中使用 --environment 标志

在发布更新时,eas update 命令需要使用 --environment 标志。这可确保你的更新与构建任务使用相同的环境变量。

当提供 --environment 标志时,eas update 将使用 EAS 服务器上的环境变量来执行更新任务,并忽略项目中通常用于本地开发的 .env 文件。

使用 eas env:pull 同步用于本地开发的环境变量

你可以使用 eas env:pull 命令将 EAS 服务器上的环境变量拉取到本地 .env 文件中用于开发。最适合用于此目的的环境是 development 环境,因为它是开发构建默认使用的环境。

为构建显式指定环境

eas.json 中为你的构建配置文件显式设置 environment 值,以确保始终为你的构建任务使用正确的环境变量,并且你对这一过程拥有完全控制权。

在使用 eas build 命令触发构建时,我可以在 CI 提供商上设置环境变量吗?

环境变量必须定义在 EAS 服务器上,才能提供给 EAS Build 构建器使用。如果你是从 CI 触发构建,那么同样的规则也适用,你应当注意不要将 GitHub Actions(或你选择的其他提供商)上的环境变量设置,与 EAS 服务器上的环境变量和密钥设置混淆。

环境变量在我的开发构建中是如何工作的?

在你的构建配置文件中设置、并影响 app.config.js 的环境变量,将用于配置开发构建。

当你运行 npx expo start 在开发构建中加载应用时,只有开发机器上可用的环境变量会被使用。

我可以在我的 EAS 项目中使用文件型环境变量吗?

除了将字符串设置为值之外,你还可以上传文件作为环境变量的值。

使用文件型环境变量的一个常见场景,是将一个被 git 忽略的 google-services.json 配置文件传递给构建任务。在任务运行期间,该文件会在项目目录之外的位置创建,而文件路径会被赋值给环境变量(GOOGLE_SERVICES_JSON=/path/to/google-services.json)。例如,你随后可以在应用配置中将 android.googleServicesFile 设置为 GOOGLE_SERVICES_JSON 环境变量的值,以便在执行构建或工作流任务时使用该文件。

app.config.js
export default { %%placeholder-start%%...%%placeholder-end%% android: { googleServicesFile: process.env.GOOGLE_SERVICES_JSON ?? '/local/path/to/google-services.json', %%placeholder-start%%...%%placeholder-end%% }, };

EAS CLI 和 Expo CLI 中处理环境变量有何不同

Expo 框架和 EAS 在使用环境变量方面的一个差异是,EAS CLI 本身不支持在解析应用配置时加载 .env 文件来设置环境变量。相反,建议使用 EAS 的环境变量管理系统,并结合 EAS CLI 命令来为你的构建任务和更新设置环境变量,以避免混淆,并确保在以下两种情况下使用完全相同的环境变量:

  • 由 EAS CLI 在准备应用配置时执行的本地应用配置解析
  • 发生在 EAS 服务器上的远程任务,这些任务通常无法访问你本地被 git 忽略的 .env 文件

SDK 54 及更早版本中,eas update 是这条规则的一个例外。默认情况下,它会像 Expo CLI 一样使用项目目录中存在的 .env 文件来为更新任务设置环境变量(它在底层执行 npx expo export 命令)。在 SDK 55 或更高版本中,--environment 标志是必需的,而 eas update 只使用设置在 EAS 服务器上的环境变量。

对于 SDK 54 或更早版本的项目,你可以在 eas update 命令中使用 --environment 标志来启用这种行为。

在 EAS 中使用环境变量有什么限制吗?

  • 带有 secret 可见性的环境变量,其环境变量值大小限制为 32 KiB;其他可见性类型则限制为 4 KiB。
  • 每个 Expo 账户最多可以创建 150 个账户级环境变量,每个应用最多可以创建 200 个项目专属环境变量。
  • 自定义环境 每个项目最多限制为 10 个。
  • 创建自定义环境时,环境名称可以包含字母、数字、下划线和连字符,长度为 3-100 个字符。