Por mais simples que pareçam, as variáveis de ambiente no NextJS tem as suas peculiaridades.
Vamos começar pelo nome de prefixo NEXT_PUBLIC_
, serve para diferenciar as variáveis que estarão disponíveis no “client-side” e no “server-site”.
Por ex, vamos supor que tenhamos o arquivo .env
e nele eu tenha as seguintes variáveis:
NEXT_PUBLIC_API_URL='https://meusite.com/api'
DB_PASS=password
No lado client, se eu usar o script process.env.DB_PASS
o resultado será undefined
pois a variável DB_PASS não está acessível publicamente.
Já o script process.env.NEXT_PUBLIC_API_URL
retornará o valor correto https://meusite.com/api
.
Porém no lado “server-side” ambas as variáveis NEXT_PUBLIC_API_URL
e DB_PASS
estarão disponíveis.
Esta configuração de prefixo é muito poderosa, com ela podemos separar dados sigilosos de simples configurações.
Outra coisa muito legal das variáveis de ambiente no NextJS é a possibilidade de ter diferentes configurações para ambientes de desenvolvimento e produção.
Explicando: caso eu tenha um arquivo .env.development
as variáveis setadas nele só serão lidas em modo desenvolvimento, ou seja, quando executo um next dev
. Enquanto isso o arquivo .env.production
será lido na versão de produção buildada ou quando eu execute um next start
(lembre-se deve executar esse comando após o build).
Tá, e se eu quiser compartilhar variáveis em diferentes ambientes ?
Bem simples, basta usar um arquivo .env.local
ou .env
, a diferença entre as duas é apenas a nível de hierarquia. Cuide para não sobre-escrever atributos.
Entendendo a hierarquia:
O arquivo .env.local
sempre será o primeiro a ser lido, logo em seguida será .env.development
ou o .env.production
dependendo do ambiente que você estiver, e por último, a .env
, ou seja, ela que “manda mais”.
Caso você tenha deployado sua aplicação Next na Vercel você poderá adicionar com facilidade os atributos das variáveis, indo na guia “Project Settings / Environment Variables”.
Você também pode “commitar” essas variáveis, certifique-se de não haver nenhuma informação sigilosa.
Por último mas não menos importante, é comum adicionar variáveis de exemplo, modelo. Geralmente se usa os nomes .env.template
, .env.example
. A aplicação NextJS não irá ler estes arquivos.
E ai! Gostou ? Espero que este artigo tenha sido útil pra você!
Para elogios, sugestões e reclamações: abra uma issue