Separe a configuração de desenvolvimento, staging e produção sem confirmar segredos - usando arquivos .env locais para desenvolvimento e variáveis de ambiente do EAS para builds na nuvem, atualizações e fluxos de trabalho.
Cartão de receita de referência rápida - pronto para copiar e colar.
// eas.json - conecte cada perfil de build a um ambiente EAS{ "build": { "development": { "developmentClient": true, "distribution": "internal", "environment": "development" }, "preview": { "distribution": "internal", "environment": "preview" }, "production": { "distribution": "store", "environment": "production" } }}
# Crie variáveis na nuvem (repita por ambiente)eas env:create --name EXPO_PUBLIC_API_URL \ --value https://api.staging.example.com \ --environment preview \ --visibility plaintext# Puxe variáveis de preview localmente (escreve .env.local - mantenha no gitignore)eas env:pull --environment preview# Publique uma atualização OTA usando o mesmo ambiente do buildeas update --environment production --message "Correção de redirecionamento de autenticação"
// src/config.ts - apenas variáveis EXPO_PUBLIC_ são incorporadas ao bundleexport const config = { apiUrl: process.env.EXPO_PUBLIC_API_URL ?? "http://localhost:3000", appEnv: process.env.EXPO_PUBLIC_APP_ENV ?? "development",} as const;
Quando usar isso:
Você envia múltiplas variantes do aplicativo (cliente de desenvolvimento, QA interno, App Store) que precisam de endpoints de API ou identificadores de bundle diferentes.
Sua equipe executa EAS Build ou EAS Update e não pode depender de arquivos .env locais não confirmados em executores remotos.
Você precisa de visibilidade baseada em função - texto simples para configuração pública, sensível para logs ofuscados, segredo para tokens NPM e chaves de assinatura.
Você quer uma única fonte de verdade para que um build de preview e uma atualização OTA de preview resolvam os mesmos valores EXPO_PUBLIC_*.
Desenvolvimento local: O Expo CLI carrega .env, .env.local e outros arquivos dotenv padrão. Variáveis prefixadas com EXPO_PUBLIC_ são substituídas estaticamente em seu código durante o bundling.
EAS Build: Quando environment é definido em um perfil de build, o EAS injeta as variáveis desse ambiente no worker de build. Variáveis de texto simples e sensíveis estão disponíveis ao resolver app.config.ts; variáveis secretas estão disponíveis apenas no servidor durante o trabalho.
EAS Update (SDK 55+):eas update --environment <nome> é obrigatório. Apenas variáveis desse ambiente EAS são usadas - arquivos .env locais são ignorados, mantendo os bundles OTA alinhados com os builds da loja.
Escopo: Variáveis podem ser para todo o projeto (um app) ou para toda a conta (compartilhadas entre apps em uma organização).
Cliente de desenvolvimento, API local, ferramentas de depuração
developmentClient: true
preview
QA interno, API de staging, TestFlight/Play interno
Todo o resto (fallback padrão)
production
Lançamentos para App Store / Play Store
distribution: "store"
Campos environment explícitos são recomendados - a detecção automática é conveniente, mas fácil de configurar incorretamente quando os perfis compartilham sinalizadores semelhantes.
Qualquer coisa incorporada em JavaScript do cliente é extraível do aplicativo compilado. Use segredos para NPM_TOKEN, SENTRY_AUTH_TOKEN e valores semelhantes em tempo de build - não para chaves de API "privadas" enviadas aos usuários.
Colocar segredos de API em EXPO_PUBLIC_* - Qualquer valor incorporado em JavaScript é visível no binário do aplicativo. Correção: Mantenha os segredos no lado do servidor; use tokens de curta duração do seu backend.
Omitir --environment em eas update (SDK 55+) - As atualizações podem não corresponder às variáveis usadas no seu build de produção. Correção: Sempre passe --environment correspondendo ao perfil de build de destino.
Usar NODE_ENV para alternar arquivos .env - npx expo export força NODE_ENV=production, portanto, arquivos de teste/staging não serão carregados como esperado. Correção: Use eas env:pull --environment <nome> ou EXPO_PUBLIC_APP_ENV explícito.
Notação de colchetes para variáveis de ambiente - process.env['EXPO_PUBLIC_KEY'] não é analisável estaticamente e não será incorporado. Correção: Use notação de ponto: process.env.EXPO_PUBLIC_KEY.
Assumir que segredos estão disponíveis em app.config.ts localmente - Variáveis do tipo segredo são ilegíveis fora dos servidores EAS. Correção: Use texto simples/sensível para valores necessários durante a resolução de configuração local, ou forneça padrões de desenvolvimento.
Confirmar .env.local após eas env:pull - Arquivos puxados frequentemente contêm valores de staging/produção. Correção: Adicione .env*.local ao .gitignore e use comandos de pull separados por máquina de desenvolvedor.
Ambientes inconsistentes entre trabalhos de fluxo de trabalho - Um trabalho de impressão digital em production emparelhado com um build de preview causa segredos incorretos. Correção: Defina jobs.<id>.environment para corresponder ao ambiente do perfil de build nos Fluxos de Trabalho EAS.
development, preview e production. Cada um é um conjunto independente de variáveis. Nomes de ambiente personalizados estão disponíveis nos planos Enterprise e Production do EAS.
Como conecto um perfil de build do eas.json a um ambiente?
Todas as variáveis atribuídas a esse ambiente são injetadas durante o build.
Qual é a diferença entre variáveis para todo o projeto e para toda a conta?
Para todo o projeto: Escopo para um projeto EAS (um app). Gerenciado nas configurações do projeto.
Para toda a conta: Disponível para todos os projetos sob uma conta ou organização Expo. Útil para tokens de ferramentas compartilhadas.
Quais variáveis são seguras para usar em JavaScript do cliente?
Apenas variáveis prefixadas com EXPO_PUBLIC_. Elas são incorporadas ao bundle no momento do build e são extraíveis do aplicativo compilado. Nunca prefixe chaves privadas ou tokens de administrador com EXPO_PUBLIC_.
Como carrego variáveis EAS para desenvolvimento local?
eas env:pull --environment development
Isso escreve um arquivo .env.local. Reinicie o Metro ou recarregue o aplicativo para capturar as alterações. Mantenha .env.local no gitignore.
Por que --environment é obrigatório para eas update no SDK 55+?
Para garantir que os bundles OTA usem as mesmas variáveis de ambiente EAS que os builds na nuvem - não qualquer arquivo .env que possa existir na máquina que executa o comando de atualização.
Armadilha: Por que process.env["EXPO_PUBLIC_API_URL"] não funciona?
A configuração do Metro do Expo apenas incorpora notação de ponto estática (process.env.EXPO_PUBLIC_API_URL). Acesso por colchetes e desestruturação não são suportados. Use notação de ponto em todos os lugares.
Para que servem as variáveis do tipo segredo?
Valores em tempo de build como NPM_TOKEN ou credenciais de registro privadas. Elas são ilegíveis fora dos servidores EAS e não estão disponíveis durante a avaliação local de app.config.ts. Elas não protegem valores que você incorpora em código do cliente.
Como o EAS escolhe um ambiente se eu omitir o campo environment?
Automaticamente: production quando distribution é store, development quando developmentClient é true, e preview para todo o resto. Configuração explícita é mais segura para equipes com muitos perfis.
Posso usar variáveis de ambiente em Fluxos de Trabalho EAS?
Sim. Jobs de build herdam environment do perfil eas.json correspondente. Outros tipos de jobs (update, fingerprint, Maestro) aceitam jobs.<id>.environment. Mantenha os ambientes consistentes entre os jobs no mesmo fluxo de trabalho.
Como funcionam as variáveis de ambiente do tipo arquivo?
Faça upload de um arquivo (por exemplo, google-services.json) como uma variável de ambiente. O EAS o expõe como um caminho de arquivo no executor do build. Útil para credenciais que devem existir como arquivos durante a compilação nativa.
Devo confirmar .env no git?
Confirme um .env com padrões seguros ou valores EXPO_PUBLIC_* de placeholder se for útil para integração. Nunca confirme .env.local ou arquivos contendo segredos reais. Use EAS para valores de produção.
Como executo um comando único com variáveis de ambiente EAS?
eas env:exec --environment production 'npx sentry-expo-upload-sourcemaps dist'
eas env:exec carrega o ambiente antes de executar o comando do shell.
Como app.config.ts lê variáveis de ambiente durante o EAS Build?
O Node avalia app.config.ts no worker de build. Variáveis EAS de texto simples e sensíveis estão disponíveis como process.env.*. Use-as para definir bundleIdentifier, name, plugins e campos extra por ambiente.
Qual é a relação entre EXPO_PUBLIC_APP_ENV e ambientes EAS?
São conceitos independentes que você alinha por convenção. EXPO_PUBLIC_APP_ENV é uma variável que você define. development/preview/production do EAS são contêineres para variáveis. Defina EXPO_PUBLIC_APP_ENV=preview dentro do ambiente EAS de preview para consistência.