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

EAS Update未按指定渠道加载对应EXPO_PUBLIC环境变量

问题描述

我正在为Expo应用配置EAS Update,期望对应渠道能加载正确的环境变量文件。目前项目中有三个环境文件:

  • .env.development
  • .env.staging
  • .env.production
    每个文件均包含EXPO_PUBLIC_API_URL变量,用于配置对应环境的API地址。

本地执行yarn expo start时,控制台能正确加载.env.development:

env: load .env.development
env: export EXPO_PUBLIC_API_URL

但执行eas update --channel staging发布更新时,控制台却加载了.env.production:

✔ Provide an update message: … stable [expo-cli] 
env: load .env.production [expo-cli] 
env: export EXPO_PUBLIC_API_URL

当前eas.json配置如下:

{
  "build": {
    "base": {
      "node": "18.18.0",
      "yarn": "1.22.19",
      "android": {
        "image": "default",
        "env": {
          "PLATFORM": "android"
        }
      },
      "ios": {
        "image": "latest",
        "env": {
          "PLATFORM": "ios"
        }
      }
    },
    "development": {
      "extends": "base",
      "developmentClient": true,
      "android": {
        "distribution": "internal",
        "withoutCredentials": true
      },
      "ios": {
        "simulator": true
      }
    },
    "staging": {
      "channel": "staging",
      "extends": "base",
      "distribution": "internal",
      "android": { "buildType": "apk" },
      "ios": { "simulator": false }
    },
    "production": {
      "channel": "production",
      "extends": "base"
    }
  }
}

我需要让eas update --channel staging命令加载.env.staging文件,试过调整配置但未解决问题。


解决方案

EAS Update默认会将NODE_ENV设置为production,因此自动加载.env.production。要实现渠道与环境文件的对应,可通过以下几种方式解决:

方法1:命令行直接指定环境变量

执行更新命令时,手动传入NODE_ENV变量,强制加载对应的.env文件:

NODE_ENV=staging eas update --channel staging

方法2:在eas.json中配置Update Profiles

在eas.json中新增update字段,为每个渠道配置对应的环境变量,让EAS自动匹配加载正确的文件:

{
  "build": {
    // 保留原有的build配置内容
  },
  "update": {
    "staging": {
      "channel": "staging",
      "env": {
        "NODE_ENV": "staging"
      }
    },
    "production": {
      "channel": "production",
      "env": {
        "NODE_ENV": "production"
      }
    },
    "development": {
      "channel": "development",
      "env": {
        "NODE_ENV": "development"
      }
    }
  }
}

配置完成后,执行更新时指定对应的profile即可:

eas update --profile staging

方法3:使用EAS_UPDATE_ENV变量

如果不想依赖NODE_ENV,可以使用EAS_UPDATE_ENV变量来匹配环境文件名(例如EAS_UPDATE_ENV=staging对应加载.env.staging)。

命令行方式:

EAS_UPDATE_ENV=staging eas update --channel staging

配置文件方式:

在eas.json的update profile中添加:

"update": {
  "staging": {
    "channel": "staging",
    "env": {
      "EAS_UPDATE_ENV": "staging"
    }
  }
}

关键注意点

  • Expo的环境变量加载优先级:先匹配EAS_UPDATE_ENV对应的.env.{EAS_UPDATE_ENV},若不存在则使用NODE_ENV对应的.env.{NODE_ENV},默认NODE_ENV=production。
  • 确保所有需要通过EAS Update传递的环境变量都带有EXPO_PUBLIC_前缀,否则无法被嵌入到更新包中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:33:15