Expo+EAS构建的React Native App闲置后丢失环境变量求助
问题:Expo EAS构建的React Native应用后台/重启后环境变量丢失
现象
首次启动应用可正常通过expo-constants获取eas.json中定义的环境变量与密钥,但应用关闭或进入后台一段时间后,Constants.manifest.extra仅保留projectId,其余环境变量全部丢失。
原因分析
- Expo Updates自动更新机制拉取了不包含自定义环境变量的远程manifest
- 开发客户端缓存异常导致配置被覆盖
- 使用了已废弃的
Constants.manifest而非静态构建的Constants.expoConfig app.config.ts中导入dotenv/config干扰了EAS构建时的环境变量注入
解决方案
1. 切换到Constants.expoConfig获取静态配置
Expo SDK 44+推荐使用Constants.expoConfig读取构建时嵌入的静态配置,它不会被更新机制修改,避免manifest被替换的问题:
import * as Constants from "expo-constants"; // 替换原有的manifest读取方式 const API_URL = Constants.expoConfig?.extra?.apiUrl; const ADMOB_KEY = Constants.expoConfig?.extra?.admob?.ios; // 注意可选链避免报错
2. 移除app.config.ts中的dotenv导入
EAS构建时会自动注入eas.json里的环境变量,导入dotenv/config可能导致运行时读取本地.env文件(构建包中不存在),覆盖构建时的变量:
// 移除这一行 // import "dotenv/config";
3. 调整Expo Updates配置(开发阶段禁用自动更新)
开发阶段开启自动更新可能拉取不完整的manifest,修改app.config.ts的updates字段:
updates: { fallbackToCacheTimeout: 30000, // 网络异常时30秒后回退到缓存配置 enabled: process.env.ENV !== 'DEVELOPMENT', // 开发阶段禁用自动更新 },
4. 清理开发客户端缓存并重新构建
如果是开发构建(developmentClient: true)出现问题:
- 卸载设备上的开发客户端
- 执行带清缓存的构建命令:
eas build --profile development --clear-cache
5. 验证构建产物中的配置
构建完成后,可解压APK/IPA包验证配置是否正确嵌入:
- iOS:检查
Expo.plist中的EXUpdatesExtra字段 - Android:检查
assets/expo-manifest.json中的extra字段
内容的提问来源于stack exchange,提问作者R. Milos
相关产品推荐
相关产品推荐

