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

EAS未为app.config正确应用环境变量问题求助

问题分析与解决方案

核心问题原因

你遇到的问题根源在于:Expo构建流程中,package(Android应用包名)、应用名称、图标/启动页这类顶层配置字段的解析时机,早于你通过dotenv加载环境变量的时机;或者你的app.config.ts未以动态函数形式导出配置,导致环境变量还未加载就已经解析了这些字段,最终始终使用开发环境的默认值。

另外需要确认:你的.env.development和.env.production文件没有被.easignore或.gitignore排除,否则EAS构建容器中无法读取到正确的环境文件,会 fallback 到本地缓存或默认值。

分步解决方案

1. 改为动态函数式导出app.config.ts

将app.config.ts改为函数式导出,确保dotenv加载完成后再生成配置对象,这样所有顶层字段都能正确读取环境变量:

import { config } from "dotenv";
import { ExpoConfig } from "@expo/config";

// 优先加载EAS传递的ENVFILE指定的环境文件
config({ path: process.env.ENVFILE });

// 动态导出配置,确保环境变量加载完成后再解析字段
export default (): ExpoConfig => ({
  name: process.env.APP_NAME || "MyApp",
  slug: "myapp", // 保持不变,绑定单个Expo项目
  // Android包名,对应你.env里的BUNDLE_ID
  package: process.env.BUNDLE_ID || "com.myapp",
  // 根据环境切换图标
  icon: process.env.ENV_NAME === "development" 
    ? "./assets/icon-dev.png" 
    : "./assets/icon.png",
  // 根据环境切换启动页
  splash: {
    image: process.env.ENV_NAME === "development" 
      ? "./assets/splash-dev.png" 
      : "./assets/splash.png",
    resizeMode: "contain",
    backgroundColor: "#ffffff"
  },
  extra: {
    apiUrl: process.env.API_URL,
    environment: process.env.ENV_NAME,
  },
  // 其他原有配置(如android、ios、plugins等)
  android: {
    adaptiveIcon: {
      foregroundImage: process.env.ENV_NAME === "development" 
        ? "./assets/adaptive-icon-dev.png" 
        : "./assets/adaptive-icon.png",
      backgroundColor: "#FFFFFF"
    }
  }
});

2. 确认环境文件被包含在构建上下文

检查你的.easignore和.gitignore文件,确保没有添加.env.development和.env.production的忽略规则。如果这些文件被忽略,EAS构建容器无法读取到正确的环境变量,会使用本地缓存的开发环境值。

3. 验证构建时的环境变量加载

在app.config.ts中添加日志输出,用于确认构建时环境变量是否正确加载:

// 在dotenv加载后添加日志
console.log("=== ENVIRONMENT LOADED ===");
console.log("ENVFILE:", process.env.ENVFILE);
console.log("BUNDLE_ID:", process.env.BUNDLE_ID);
console.log("APP_NAME:", process.env.APP_NAME);

运行构建命令时,查看构建日志中的这些输出,确认环境变量是否对应你指定的构建profile。

4. 强制清理构建缓存并重新构建

使用以下命令彻底清理缓存并构建生产环境(示例):

eas build --clear-cache --platform android --profile production

关键说明

  • 只要package字段(Android应用包名)正确解析为不同的值(com.myapp.dev和com.myapp),两个版本的APK就能同时安装在手机上,不需要修改slug字段——slug只是Expo项目的标识,和本地应用的包名无关。
  • 所有依赖环境变量的顶层配置字段(如name、icon、splash)都必须在动态函数中读取,确保环境变量加载完成后再解析。

内容的提问来源于stack exchange,提问作者Ognjen Mišić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:18:18