Usando variáveis de ambiente
Astro utiliza Vite para suas variáveis de ambiente e o permite utilizar qualquer um de seus métodos para obter e definir variáveis de ambiente.
Note que enquanto todas as variáveis de ambiente estão disponíveis em código no lado do servidor, apenas variáveis de ambiente com o prefixo PUBLIC_ estão disponíveis em código no lado do cliente por segurança.
Veja o exemplo oficial de variáveis de ambiente para entender as melhores práticas.
SENHA_SECRETA=senha123
PUBLIC_TODOS=aqui
Nesse exemplo, PUBLIC_TODOS (acessível via import.meta.env.PUBLIC_TODOS) estará disponível no código do cliente e do servidor, enquanto SENHA_SECRETA (acessível via import.meta.env.SENHA_SECRETA) estará apenas no lado do servidor.
Variáveis de ambiente padrões
Section titled Variáveis de ambiente padrõesAstro inclui algumas variáveis de ambiente por padrão:
import.meta.env.MODE(development(desenvolvimento) |production(produção)): o modo no qual o seu site está sendo executado. Seu valor édevelopmentquando estiver executandoastro deve seráproductionquando estiver executandoastro build.import.meta.env.BASE_URL(string): a URL base na qual o seu site está sendo acessado. Isso é determinado pela opçãobaseda configuração.import.meta.env.PROD(boolean): Se o seu site está sendo executado em produção.import.meta.env.DEV(boolean): Se o seu site está sendo executado em desenvolvimento (sempre o contrário deimport.meta.env.PROD).import.meta.env.SITE(string): A opçãositeespecificada noastro.configdo seu projeto.
Definindo variáveis de ambiente
Section titled Definindo variáveis de ambienteVariáveis de ambiente podem ser carregadas de arquivos .env no diretório do seu projeto.
Você também pode adicionar um modo (entre production ou development) ao nome do arquivo, como .env.production ou env.development, que faz com que a variável de ambiente apenas funcione nesse modo.
Simplesmente crie um arquivo .env no diretório do seu projeto e adicione algumas variáveis a ele.
# Isso só estará disponível enquanto executado no servidor!
SENHA_BD="foobar"
# Isso estará disponível em todo lugar!
PUBLIC_POKEAPI="https://pokeapi.co/api/v2"
# Nomes de arquivo suportados:
.env # carregado em todos os casos
.env.local # carregado em todos os casos, ignorado pelo git
.env.[modo] # carregado apenas no modo especificado
.env.[modo].local # carregado apenas no modo especificado, ignorado pelo git
Obtendo variáveis de ambiente
Section titled Obtendo variáveis de ambienteAo invés de utilizar process.env com o Vite, você pode utilizar import.meta.env, que usa a funcionalidade import.meta adicionado no ES2020.
Por exemplo, utilize import.meta.env.PUBLIC_POKEAPI para obter a variável de ambiente PUBLIC_POKEAPI.
// Quando import.meta.env.SSR === true
const dados = await db(import.meta.env.SENHA_BD);
// Quando import.meta.env.SSR === false
const dados = fetch(`${import.meta.env.PUBLIC_POKEAPI}/pokemon/squirtle`);
IntelliSense para TypeScript
Section titled IntelliSense para TypeScriptPor padrão, Astro fornece definições de tipo para import.meta.env em astro/client.d.ts.
Embora você possa definir mais variáveis customizadas em arquivos .env.[modo], você pode querer IntelliSense para TypeScript para variáveis de ambiente definidas por usuários que são prefixadas com PUBLIC_.
Para realizar isso, você pode criar um env.d.ts em src/ e configurar ImportMetaEnv assim:
interface ImportMetaEnv {
readonly SENHA_BD: string;
readonly PUBLIC_POKEAPI: string;
// mais variáveis de ambiente...
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}