You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:
    export FIREBASE_API_KEY="你的实际Key" && eas build --platform android
    
    Windows PowerShell:
    $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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:55:04