Expo EAS构建时环境变量正确配置方案(解决Firebase密钥错误)
Expo Managed Workflow EAS构建环境变量配置方案
问题原因
本地开发时Expo会自动读取你的.env文件,但EAS构建是在Expo远程服务器执行的,你的.env已加入.gitignore未提交到源码库,导致远程构建环境无法获取这些变量,最终Firebase配置中的API Key为空,触发auth/invalid-api-key错误。
正确配置步骤(推荐使用EAS Secrets,安全且无需提交敏感信息)
1. 配置EAS Secrets(将敏感变量存储到Expo云端)
- 确保已安装EAS CLI:
npm install -g eas-cli - 登录你的Expo账号:
eas login - 逐个添加所需环境变量到项目级Secrets:
# 示例:添加Firebase API Key eas secret:create --scope project --name FIREBASE_API_KEY --value "你的实际API Key" # 重复此命令添加所有Firebase变量、SUMMARY_API等 eas secret:create --scope project --name FIREBASE_AUTH_DOMAIN --value "你的Auth Domain" eas secret:create --scope project --name FIREBASE_PROJECT_ID --value "你的Project ID" # ...其他变量以此类推
2. 修改app.config.js暴露变量
在app.config.js(或app.config.ts)中,将Secrets变量注入到Expo配置的extra字段,方便应用内读取:
export default { expo: { // 保留你原有的其他配置(name、slug、sdkVersion等) extra: { firebaseApiKey: process.env.FIREBASE_API_KEY, firebaseAuthDomain: process.env.FIREBASE_AUTH_DOMAIN, firebaseProjectId: process.env.FIREBASE_PROJECT_ID, firebaseStorageBucket: process.env.FIREBASE_STORAGE_BUCKET, firebaseMessagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID, firebaseAppId: process.env.FIREBASE_APP_ID, firebaseMeasurementId: process.env.FIREBASE_MEASUREMENT_ID, summaryApi: process.env.SUMMARY_API, eas: { projectId: "你的EAS项目ID(可在expo.dev后台查看)", }, }, }, };
3. 修改Firebase配置文件读取变量
安装expo-constants(Expo官方推荐的配置读取工具):
npx expo install expo-constants
然后修改firebaseConfig.js:
import Constants from 'expo-constants'; const firebaseConfig = { apiKey: Constants.expoConfig.extra.firebaseApiKey, authDomain: Constants.expoConfig.extra.firebaseAuthDomain, projectId: Constants.expoConfig.extra.firebaseProjectId, storageBucket: Constants.expoConfig.extra.firebaseStorageBucket, messagingSenderId: Constants.expoConfig.extra.firebaseMessagingSenderId, appId: Constants.expoConfig.extra.firebaseAppId, measurementId: Constants.expoConfig.extra.firebaseMeasurementId, };
4. 执行EAS构建
eas build --platform android
其他可选方法(不推荐,仅作参考)
方法1:通过eas.json配合本地环境变量注入
- 修改
eas.json,在构建配置中引用本地环境变量:{ "build": { "production": { "android": { "buildType": "apk" }, "env": { "FIREBASE_API_KEY": "$FIREBASE_API_KEY", "FIREBASE_AUTH_DOMAIN": "$FIREBASE_AUTH_DOMAIN", // 其他变量同理 } } } } - 构建时在本地终端临时设置环境变量:
Linux/macOS:
Windows PowerShell:export FIREBASE_API_KEY="你的实际Key" && eas build --platform android
弊端:每次构建需手动设置,团队协作成本高,易泄露变量。$env:FIREBASE_API_KEY="你的实际Key"; eas build --platform android
方法2:构建时上传本地.env文件
执行构建时指定.env文件:
eas build --platform android --env-file .env
弊端:CI/CD场景下需额外管理.env存储,安全性不如EAS Secrets。
总结
最推荐使用EAS Secrets,它将敏感变量安全存储在Expo云端,无需提交到源码控制,构建时自动注入环境,是Expo官方推荐的敏感变量管理方案。
内容的提问来源于stack exchange,提问作者KAPIL BADOKAR
相关产品推荐
相关产品推荐

