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

使用EAS Build与EAS Update时的环境变量管理方案咨询

EAS Build & Update 环境变量最佳管理方案

问题根源

EAS Build会自动读取eas.json对应profile的env配置并注入构建环境,所以app.config.ts能通过process.env.API_URL拿到值;但EAS Update默认不会自动加载eas.json的环境变量,导致更新包构建时无法获取API_URL,最终应用提示缺失。

最佳实践方案

1. 统一环境变量加载逻辑

先安装@expo/config(用于加载对应环境的配置文件):

npm install @expo/config

修改app.config.ts,替换原有的import 'dotenv/config',改为根据当前环境加载对应配置:

import { loadEnvConfig } from '@expo/config';

// 加载对应环境的.env文件,优先读取APP_ENV变量,默认用development
const projectRoot = __dirname;
loadEnvConfig(projectRoot, {
  env: process.env.APP_ENV || 'development',
});

// 后续代码保持不变
const runtimeVersion = '1.0.0';
const version = '1.0.0';
const EASProjectId = 'my-eas-project-id';
const scheme = 'com.myapp.mobile';

export default {
  expo: {
    // ...原有配置内容
    extra: {
      eas: { projectId: EASProjectId },
      API_URL: process.env.API_URL,
    },
  },
};

2. 分环境配置变量

可以选择两种方式管理环境变量:

方式A:本地.env文件(适合非敏感变量)

创建分环境的.env文件:

  • .env.development:API_URL=https://dev.api.myapp.com
  • .env.preview:API_URL=https://staging.api.myapp.com
  • .env.production:API_URL=https://api.myapp.com
方式B:EAS Secrets(适合敏感变量,更安全)

在EAS控制台的项目Secrets中添加:

  • API_URL_DEV:开发环境地址
  • API_URL_STAGING:预览环境地址
  • API_URL_PROD:生产环境地址

然后在eas.json的profile中引用这些Secrets:

"build": {
  "development": {
    "distribution": "internal",
    "android": {
      "gradleCommand": ":app:assembleDebug"
    },
    "ios": {
      "buildConfiguration": "Debug"
    },
    "env": {
      "APP_ENV": "development",
      "API_URL": "${API_URL_DEV}"
    }
  },
  "preview": {
    "node": "18.17.0",
    "channel": "staging",
    "distribution": "internal",
    "env": {
      "APP_PROFILE": "preview",
      "APP_CHANNEL": "staging",
      "APP_ENV": "preview",
      "API_URL": "${API_URL_STAGING}"
    }
  },
  "production": {
    "node": "18.17.0",
    "channel": "production",
    "distribution": "store",
    "env": {
      "APP_PROFILE": "production",
      "APP_CHANNEL": "production",
      "APP_ENV": "production",
      "API_URL": "${API_URL_PROD}"
    }
  }
}

3. 让EAS Update加载对应环境变量

修改eas.json,添加update配置块,绑定channel与环境变量:

{
  "cli": {
    "version": ">= 3.17.1"
  },
  "build": { ... }, // 保留原有build配置
  "update": {
    "preview": {
      "channel": "staging",
      "env": {
        "APP_ENV": "preview",
        "API_URL": "https://staging.api.myapp.com" // 或用Secrets: "${API_URL_STAGING}"
      }
    },
    "production": {
      "channel": "production",
      "env": {
        "APP_ENV": "production",
        "API_URL": "https://api.myapp.com" // 或用Secrets: "${API_URL_PROD}"
      }
    }
  },
  "submit": {
    "production": {}
  }
}

之后执行EAS Update时,指定对应profile即可自动加载环境变量:

# 发布到staging频道
eas update --platform ios --profile preview

# 发布到production频道
eas update --platform ios --profile production

4. 验证变量是否生效

安装expo-constants并添加调试代码,确认变量正确加载:

npm install expo-constants

在应用中添加:

import Constants from 'expo-constants';

// 调试时打印变量
console.log('当前API_URL:', Constants.expoConfig?.extra?.API_URL);

关键注意点

  • 本地开发时,expo run:ios默认使用development环境,会加载.env.development
  • 不要把包含敏感信息的.env文件提交到Git,用.gitignore忽略
  • EAS Secrets中的变量会自动注入到EAS Build和Update的环境中,无需本地配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:24:51