如何使用EAS Secrets配置Expo项目环境变量?生产构建异常排查
Expo环境变量配置问题解答
不需要在app.json和eas.json里重复声明环境变量,但你的当前配置存在几个可能导致生产APK请求失败的问题,逐一排查:
1. app.config.js结构错误
你把eas节点嵌套在了extra里面,这是不对的。eas应该和name、slug等顶级配置同级,正确写法如下:
import "dotenv/config"; module.exports = () => { return { name: "MyApp-V2", slug: "MyApp-V2", scheme: "msauth.com.myapp", extra: { ENDPOINT_URL: process.env.ENDPOINT_URL, CLIENT_ID: process.env.CLIENT_ID, // 其他所有环境变量... }, eas: { projectId: "***", }, }; };
这个结构错误会导致EAS构建时无法正确解析配置,进而影响环境变量的注入。
2. 确认EAS Secrets的环境覆盖
你用eas secret:push --scope project推送的项目级密钥,默认会覆盖所有构建环境,但最好手动去EAS后台检查:每个变量的环境范围是否包含production,变量名是否和你在app.config.js里用的完全一致(大小写敏感)。
3. 生产构建配置缺失
你的eas.json里production构建项是空的,建议补充Android构建类型配置,不然生产构建可能不会生成可测试的APK:
"production": { "android": { "buildType": "apk" } }
4. 代码中读取环境变量的正确方式
开发环境下用process.env能直接取到变量,但生产打包后,原生环境里没有process.env,必须用expo-constants读取:
import Constants from 'expo-constants'; // 示例:读取接口地址 const apiUrl = Constants.expoConfig.extra.ENDPOINT_URL;
这是绝大多数人踩坑的点,也是你生产环境请求失败的核心原因之一。
最后总结
- 不用在app.json/eas.json重复声明环境变量
- 先修正app.config.js的结构错误
- 确认EAS Secrets在生产环境可用
- 代码里改用expo-constants读取变量
- 补全eas.json的生产构建配置
内容的提问来源于stack exchange,提问作者gchan26
相关产品推荐
相关产品推荐

