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

Expo EAS构建时环境变量与密钥未被完全识别的问题

解决方案

1. 替换dotenv为Expo内置环境变量读取方式

移除app.config.ts中的dotenv依赖,改用Expo ConfigContext提供的env对象获取环境变量。EAS构建时会自动注入Secrets到env中,本地开发也会自动加载.env/.env.local文件的变量,无需手动调用dotenv.config()。

修改后的app.config.ts:

import { ExpoConfig, ConfigContext } from "expo/config";

export default ({ config, env }: ConfigContext): ExpoConfig => ({
  ...config,
  ios: {
    ...config.ios,
    googleServicesFile: env.GOOGLE_SERVICES_PLIST!,
  },
  android: {
    ...config.android,
    googleServicesFile: env.GOOGLE_SERVICES_JSON!,
  },
  plugins: [
    ...config.plugins || [],
    [
      "react-native-fbsdk-next",
      {
        appID: env.SSO_FB_APPID!,
        clientToken: env.SSO_FB_CLIENT_TOKEN!,
        displayName: "my-app",
        scheme: `fb${env.SSO_FB_APPID!}`,
      },
    ],
  ],
});

注:!是非空断言,确保变量不为undefined,避免插件因值缺失报错。

2. 验证EAS Secrets的关联配置

确保Secrets已正确绑定到目标构建环境(如production/development):

  • 运行eas secret:list查看所有Secrets,确认SSO_FB_APPID、SSO_FB_CLIENT_TOKEN、GOOGLE_SERVICES_JSON、GOOGLE_SERVICES_PLIST已存在且关联到对应profile。
  • 若缺失,用eas secret:push --scope project --name <SECRET_NAME> --value <SECRET_VALUE> --profile <TARGET_PROFILE>添加。

3. 处理本地构建的Google服务文件路径

本地prebuild时,需在.env.local中配置本地文件的相对路径:

GOOGLE_SERVICES_JSON=./google-services.json
GOOGLE_SERVICES_PLIST=./GoogleService-Info.plist

确保这些文件存在于项目根目录,且已添加到.gitignore避免提交到仓库。

4. 升级react-native-fbsdk-next版本

旧版本插件可能存在动态配置解析的bug,升级到最新稳定版:

npm install react-native-fbsdk-next@latest
# 或
yarn add react-native-fbsdk-next@latest

问题根源分析

你遇到的矛盾(解析后的app.json有值但prebuild报错),大概率是手动调用dotenv.config()导致的环境变量加载时机问题:EAS构建环境中没有.env文件,dotenv尝试加载不存在的文件可能干扰了原生环境变量的注入;改用Expo内置的env对象则能保证变量在配置解析和插件执行阶段都能正确获取。

内容的提问来源于stack exchange,提问作者SteppingHat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:05:55