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

Expo多环境管理:无需前缀环境变量的实现方案

Expo多环境密钥管理(无需前缀变量方案)

方案1:环境专属.env文件+EAS Secrets按环境推送

这是最贴合EAS设计逻辑的方案,无需给变量加前缀,通过独立的环境配置文件实现隔离:

  1. 为每个环境创建独立.env文件

    • .env.development:
      API_KEY=dev-dev-dev
      PAYMENT_KEY=dev-pay-123
      
    • .env.staging:
      API_KEY=stg-stg-stg
      PAYMENT_KEY=stg-pay-456
      
    • .env.production:
      API_KEY=prd-prd-prd
      PAYMENT_KEY=prd-pay-789
      
  2. 按环境推送Secrets
    使用--environment参数将对应环境的变量推送到EAS:

    # 推送开发环境变量
    eas secret:push --scope project --env-file .env.development --environment development
    # 推送预发布环境变量
    eas secret:push --scope project --env-file .env.staging --environment staging
    # 推送生产环境变量
    eas secret:push --scope project --env-file .env.production --environment production
    
  3. 简化eas.json配置
    各构建配置无需手动映射变量,EAS会自动加载对应环境的Secrets:

    "build": {
      "development": {
        "developmentClient": true,
        "distribution": "internal"
      },
      "staging": {
        "distribution": "internal"
      },
      "production": {
        "distribution": "store"
      }
    }
    

    代码中直接通过process.env.API_KEY调用对应环境的变量即可。

方案2:EAS环境上下文+app.config.ts动态读取

如果不想维护多个.env文件,可直接按环境创建Secrets,再通过构建上下文自动匹配:

  1. 按环境创建无前缀Secrets
    用--environment指定变量归属的环境:

    # 开发环境API_KEY
    eas secret:create --name API_KEY --value dev-dev-dev --type string --environment development
    # 预发布环境API_KEY
    eas secret:create --name API_KEY --value stg-stg-stg --type string --environment staging
    # 生产环境API_KEY
    eas secret:create --name API_KEY --value prd-prd-prd --type string --environment production
    
  2. 在app.config.ts中动态关联
    通过EAS_BUILD_PROFILE环境变量判断当前构建环境,直接读取对应密钥:

    import { ExpoConfig, ConfigContext } from '@expo/config';
    
    export default ({ config }: ConfigContext): ExpoConfig => {
      const buildProfile = process.env.EAS_BUILD_PROFILE || 'development';
      
      return {
        ...config,
        extra: {
          apiKey: process.env.API_KEY,
          paymentKey: process.env.PAYMENT_KEY
        },
        // 可选:根据构建环境自动修改slug
        slug: `my-project-${buildProfile}`
      };
    };
    

    代码中可通过expo-constants的Constants.expoConfig.extra.apiKey获取对应环境的密钥。

不推荐多项目方案的原因

创建多个独立项目会带来额外负担:

  • 需要同步维护每个项目的代码、依赖和配置
  • 无法共享EAS构建缓存、团队权限和发布流程
  • 版本管理和迭代效率大幅降低

以上两种方案均无需给变量加前缀,完全按环境隔离密钥,既符合EAS的设计逻辑,也能大幅减少维护工作量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:33:25