This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
在 EAS 中使用环境变量
编辑页面
了解如何在 EAS 构建、更新、托管和工作流作业中使用环境变量。
以下章节介绍如何在 EAS builds、updates 和 workflow jobs 中使用环境变量。
在 EAS Build 中使用环境变量
为了完全控制构建所使用的环境,你可以在 eas.json 文件中的 build profiles 设置里指定 environment 字段。
所选环境中的所有环境变量都会在构建过程中使用。基于 EAS CLI 中动态 app config 的构建配置解析时,也可以使用纯文本和敏感变量。
如果你没有设置 environment 选项,我们会根据你的构建配置自动设置环境:
- 当
distribution设置为store时,使用production - 当
developmentClient为true时,使用development - 其他情况使用
preview
内置环境变量
以下环境变量是暴露给每个 job 的额外系统环境变量,可在任意构建步骤中使用。它们不属于任何项目环境,并且在本地评估 app.config.js 时不可用:
CI=1:表示这是一个 CI 环境EAS_BUILD=true:表示这是一个 EAS Build 环境EAS_BUILD_PLATFORM:值为android或iosEAS_BUILD_RUNNER:对于 EAS Build 云端构建,值为eas-build;对于本地构建,值为local-build-pluginEAS_BUILD_ID:构建 ID,例如f51831f0-ea30-406a-8c5f-f8e1cc57d39cEAS_BUILD_PROFILE:eas.json 中构建配置文件的名称,例如productionEAS_BUILD_PROJECT_ID:EAS 项目 ID,例如bd2f7e21-1ee7-47f2-8357-d7c4b50622fbEAS_BUILD_GIT_COMMIT_HASH:Git 提交的哈希值,例如88f28ab5ea39108ade978de2d0d1adeedf0ece76EAS_BUILD_NPM_CACHE_URL:npm 缓存的 URL(详细了解私有 npm 包)EAS_BUILD_MAVEN_CACHE_URL:Maven 缓存的 URL(详细了解 Android 依赖项缓存)EAS_BUILD_COCOAPODS_CACHE_URL:CocoaPods 缓存的 URL(详细了解 iOS 依赖项缓存)EAS_BUILD_USERNAME:发起构建的用户的用户名(机器人用户的值未定义)EAS_BUILD_WORKINGDIR:包含项目的远程目录路径EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP:设置为1可跳过早期 JavaScript 打包检查。默认情况下,EAS Build 会在原生构建前运行 JavaScript 打包器,以便更早地发现 JS 错误。禁用此步骤意味着只有在原生构建步骤中才能捕获 JavaScript 错误。EAS_BUILD_DISABLE_NPM_CACHE:设置为1可禁用 npm 缓存服务器(详细了解 JavaScript 依赖项缓存)EAS_BUILD_DISABLE_MAVEN_CACHE:设置为1可禁用 Maven 缓存服务器(详细了解 Android 依赖项缓存)EAS_BUILD_DISABLE_COCOAPODS_CACHE:设置为1可禁用 CocoaPods 缓存服务器(详细了解 iOS 依赖项缓存)
秘密类型的环境变量在 EAS CLI 中进行构建配置解析时不可用,因为它们无法在 EAS 服务器之外读取。
在 EAS Update 中使用环境变量
在 SDK 55 或更高版本 中,运行 eas update 时必须使用 --environment 标志。指定的 EAS 环境中的环境变量会在更新过程中使用。对于使用 SDK 54 或更早版本的项目,如果省略 --environment 标志,eas update 会回退到本地的 .env 文件。
要在 EAS Update 中使用 EAS 环境变量,请使用 --environment 标志运行 eas update 命令:
当使用 --environment 标志时,更新过程中只会使用指定 EAS 环境中的环境变量,不会使用项目中存在的 .env 文件。这样可以确保你的更新和构建使用相同的环境变量。
Expo CLI 会将代码中的带前缀变量(例如 process.env.EXPO_PUBLIC_VARNAME)替换为由 --environment 标志指定环境下 EAS 服务器上设置的相应纯文本和敏感环境变量值。无论在本地机器还是在 CI/CD 服务器上,你应用代码中的任何 EXPO_PUBLIC_ 变量都会被内联替换为对应的 EAS 环境值。
--environment 标志确保更新和构建 job 使用相同的环境变量。
秘密变量在更新过程中不可用,因为它们无法在 EAS 服务器之外读取。
在 EAS Hosting 中使用环境变量
Expo Router Web 项目可以包含同时用于客户端和服务端的环境变量。客户端值会在运行 npx expo export 时内联到 JavaScript bundle 中,而服务端值会保存在服务器上,并在运行 eas deploy 时与 API 路由一起部署。
使用 EAS Hosting 时,只能使用纯文本和敏感环境变量。秘密变量不能通过 EAS Hosting 部署。
客户端环境变量
所有在浏览器中运行的代码都属于客户端。在 Expo Router 项目中,这包括所有不是 API Route 或 server function 的代码。客户端代码中的环境变量会在构建时内联。你绝不应该在客户端代码中放置任何敏感信息,这就是为什么所有客户端环境变量都必须以 EXPO_PUBLIC_ 为前缀。
当你运行 npx expo export 时,所有 process.env.EXPO_PUBLIC_* 环境变量实例都会被替换为环境中的值。
服务端环境变量
你所有 API routes 中的代码(以 +api.ts 结尾的文件)都会在服务器上运行。由于在服务器上运行的代码对应用用户不可见,你可以安全地使用诸如 API key 和 token 之类的敏感环境变量。
服务端环境变量不会被内联到代码中,而是在你运行 eas deploy 命令时随着部署一起上传。
存储环境变量
当使用 EAS 环境变量部署项目时,请注意客户端和服务端代码的环境变量会在不同步骤中包含:
- 运行
npx expo export --platform web会将前端代码中的EXPO_PUBLIC_变量内联。因此,在运行npx expo export命令之前,请确保你的 .env.local 文件包含正确的环境变量。 eas deploy --environment production会将给定环境(此处为production)的所有变量包含到 API routes 中。使用--environment标志加载的 EAS 环境变量会优先于 .env 和 .env.local 文件中定义的变量。
环境变量是按部署生效的,且部署是不可变的。这意味着在更改环境变量之后,你需要重新导出项目并重新部署,才能让这些更改生效。
本地开发
对于本地开发,客户端和服务端环境变量都从本地 .env 文件中加载,这些文件应被加入 gitignore。如果你正在使用 EAS 环境变量,请使用 eas env:pull 来获取 development、preview 或 production 的环境变量。
在其他命令中使用环境变量
向其他 EAS 命令提供非秘密 EAS 环境变量的一种方式是使用 eas env:exec 命令。
例如,在更新 bundle 创建后,使用 SENTRY_AUTH_TOKEN 变量上传 source map 到 Sentry 时,这会很有用。
在 EAS Workflows 中使用环境变量
为 workflow jobs 设置 EAS 环境
当你省略 jobs.<job_id>.environment 时,默认值取决于 job 类型:
- 构建 jobs:环境来自 eas.json 中的构建 profile(
build.<profile>.environment)。如果缺少该字段,则应用上述自动默认值。在 EAS Build 中使用环境变量。 - 提交 jobs:环境继承自提交的构建。
- Maestro jobs(
maestro和maestro-cloud):环境默认为preview。 - 其他 jobs(例如 update、fingerprint、deploy 和自定义 jobs):环境默认为
production。
在 job 上显式设置 environment 可以覆盖其默认值,并使其与 workflow 中之前使用的构建 profile 保持同步。有关完整说明,请参阅Job 环境。
在下面的示例中,build job 配置为使用 preview profile,然后 update job 配置为使用相同的 EAS 环境。
在下面的示例中,fingerprint job 配置为使用 production 环境,然后 build job 配置为使用相同的 EAS 环境。
请将 job 的环境值与 build profile 保持一致,以避免 secret 不匹配。例如,fingerprint/update jobs 通常应与 build 的 profile 环境保持一致。
在 job 执行期间动态设置环境变量
你还可以在 job 执行期间使用 set-env 命令动态设置环境变量。
set-env 可执行文件在 EAS Build workers 的 PATH 中可用,可用于设置在后续构建阶段可见的环境变量。
例如,你可以在某个 EAS Build hooks 中添加以下内容,环境变量 EXAMPLE_ENV 将一直可用到构建 job 结束。
访问环境变量
创建环境变量后,你可以在后续的 EAS Build jobs 中通过 Node.js 中的 process.env.VARIABLE_NAME 或 shell 脚本中的 $VARIABLE_NAME 来读取它。