Expo多环境管理:无需前缀环境变量的实现方案
Expo多环境密钥管理(无需前缀变量方案)
方案1:环境专属.env文件+EAS Secrets按环境推送
这是最贴合EAS设计逻辑的方案,无需给变量加前缀,通过独立的环境配置文件实现隔离:
为每个环境创建独立.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
按环境推送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简化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,再通过构建上下文自动匹配:
按环境创建无前缀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在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
相关产品推荐
相关产品推荐

