Expo React Native各构建环境中Secrets返回null问题排查
问题核心是EAS构建流程不会自动读取Expo账户级环境变量:本地启动时你手动通过命令行传入了变量,所以process.env能拿到,但EAS构建时没有把账户级变量注入到构建环境的process.env中,导致app.config.js取不到值,最终Constants.expoConfig.extra里的变量为undefined。
解决步骤:
确认账户级变量已关联项目
登录Expo Dashboard进入你的项目,检查「Settings」->「Environment Variables」里是否已添加GOOGLE_API_KEY且处于启用状态。账户级变量需要手动关联到具体项目,不会自动应用到所有账户下的项目。在eas.json中显式声明要注入的环境变量
EAS构建需要你在每个构建配置里明确指定哪些环境变量要注入到构建流程中,修改你的eas.json,给每个build配置加上env字段:... "build": { "production": { "ios": { "resourceClass": "m1-medium" }, "env": ["GOOGLE_API_KEY"] }, "development": { "developmentClient": true, "distribution": "internal", "ios": { "resourceClass": "m1-medium" }, "env": ["GOOGLE_API_KEY"] }, "staging": { "distribution": "internal", "ios": { "resourceClass": "m1-medium" }, "extends": "production", "env": ["GOOGLE_API_KEY"] } }, ...也可以用键值对形式(效果一致):
"env": { "GOOGLE_API_KEY": "GOOGLE_API_KEY" }这个配置会告诉EAS构建:将账户级的
GOOGLE_API_KEY变量注入到构建环境的process.env中,让app.config.js能够读取到。验证app.config.js的逻辑
当前app.config.js的逻辑没问题,你可以先去掉|| null测试,确保变量能被正确注入后再处理默认值。另外,dotenv/config在EAS构建中不是必需的(EAS会直接注入process.env),但保留也不会有影响。
完成以上配置后重新触发EAS构建,变量就能正常出现在Constants.expoConfig.extra里了。
内容的提问来源于stack exchange,提问作者Sahil Sian

