EAS Update未按指定渠道加载对应EXPO_PUBLIC环境变量
问题描述
我正在为Expo应用配置EAS Update,期望对应渠道能加载正确的环境变量文件。目前项目中有三个环境文件:
.env.development.env.staging.env.production
每个文件均包含EXPO_PUBLIC_API_URL变量,用于配置对应环境的API地址。
本地执行yarn expo start时,控制台能正确加载.env.development:
env: load .env.development env: export EXPO_PUBLIC_API_URL
但执行eas update --channel staging发布更新时,控制台却加载了.env.production:
✔ Provide an update message: … stable [expo-cli] env: load .env.production [expo-cli] env: export EXPO_PUBLIC_API_URL
当前eas.json配置如下:
{ "build": { "base": { "node": "18.18.0", "yarn": "1.22.19", "android": { "image": "default", "env": { "PLATFORM": "android" } }, "ios": { "image": "latest", "env": { "PLATFORM": "ios" } } }, "development": { "extends": "base", "developmentClient": true, "android": { "distribution": "internal", "withoutCredentials": true }, "ios": { "simulator": true } }, "staging": { "channel": "staging", "extends": "base", "distribution": "internal", "android": { "buildType": "apk" }, "ios": { "simulator": false } }, "production": { "channel": "production", "extends": "base" } } }
我需要让eas update --channel staging命令加载.env.staging文件,试过调整配置但未解决问题。
解决方案
EAS Update默认会将NODE_ENV设置为production,因此自动加载.env.production。要实现渠道与环境文件的对应,可通过以下几种方式解决:
方法1:命令行直接指定环境变量
执行更新命令时,手动传入NODE_ENV变量,强制加载对应的.env文件:
NODE_ENV=staging eas update --channel staging
方法2:在eas.json中配置Update Profiles
在eas.json中新增update字段,为每个渠道配置对应的环境变量,让EAS自动匹配加载正确的文件:
{ "build": { // 保留原有的build配置内容 }, "update": { "staging": { "channel": "staging", "env": { "NODE_ENV": "staging" } }, "production": { "channel": "production", "env": { "NODE_ENV": "production" } }, "development": { "channel": "development", "env": { "NODE_ENV": "development" } } } }
配置完成后,执行更新时指定对应的profile即可:
eas update --profile staging
方法3:使用EAS_UPDATE_ENV变量
如果不想依赖NODE_ENV,可以使用EAS_UPDATE_ENV变量来匹配环境文件名(例如EAS_UPDATE_ENV=staging对应加载.env.staging)。
命令行方式:
EAS_UPDATE_ENV=staging eas update --channel staging
配置文件方式:
在eas.json的update profile中添加:
"update": { "staging": { "channel": "staging", "env": { "EAS_UPDATE_ENV": "staging" } } }
关键注意点
- Expo的环境变量加载优先级:先匹配
EAS_UPDATE_ENV对应的.env.{EAS_UPDATE_ENV},若不存在则使用NODE_ENV对应的.env.{NODE_ENV},默认NODE_ENV=production。 - 确保所有需要通过EAS Update传递的环境变量都带有
EXPO_PUBLIC_前缀,否则无法被嵌入到更新包中。
内容的提问来源于stack exchange,提问作者Onkar Deol
相关产品推荐
相关产品推荐

