Artigo original: How to customize Node.js .env files for different environment stages

Escrito por: Erisan Olasheni

Você já se viu em uma situação em que precisava de variáveis de ambiente personalizadas para diferentes estágios de desenvolvimento do seu aplicativo? Aqui está uma solução de uma linha.

O desenvolvimento tem sido muito mais fácil desde a invenção do arquivo .env. Você pode definir facilmente suas variáveis e valores de ambiente com a sintaxe VARIAVEL_DE_AMBIENTE=VALOR e pronto! Essas variáveis foram carregadas como suas variáveis de ambiente, possibilitando acesso rápido a elas :

console.log(process.env.VARIAVEL_DE_AMBIENTE)

Caso você ainda esteja se perguntando o que tudo isso significa, bem, você provavelmente não conhece o arquivo .env. Na verdade, é um arquivo de texto de configuração simples, que é usado para definir algumas variáveis que você deseja passar para o ambiente do seu aplicativo.

Este arquivo precisa de algo como um analisador para fazê-lo funcionar. O analisador lê as definições de variáveis uma a uma e as analisa para o ambiente. Ele usa o formato VARIAVEL_DE_AMBIENTE=VALOR (no caso do Node.js: process.env[VARIAVEL_DE_AMBIENTE]=VALOR).

Obviamente, esse não é um recurso interno do Node.js. Você precisa projetá-lo com um módulo popular chamado dotenv.

É uma boa solução alternativa, pois realmente facilitou o desenvolvimento entre co-desenvolvedores e em toda a comunidade de desenvolvedores como um todo. Eu, pessoalmente, estava usando o módulo dotenv. Até que fiquei preso tentando obter uma solução que pudesse me fazer usar um arquivo de configuração diferente para um ambiente específico. Isso seria ainda mais legal... certo? Sim! Infelizmente, porém, o módulo dotenv não nos fornece essa vantagem.

Então, o que vem depois? Precisamos disso para facilitar o desenvolvimento e os testes em diferentes estágios de desenvolvimento!

Que tal arquivos .env personalizados para diferentes estágios do ambiente?

Você não acha que seria uma boa solução? Definir variáveis de ambiente personalizadas apenas criando um arquivo .env.nome_do_ambiente? Legal! Isso é o que custom-env veio fazer.

Custom-env é uma biblioteca criada para facilitar o desenvolvimento, permitindo várias configurações de .env para diferentes ambientes. Isso é feito carregando variáveis de ambiente de um arquivo .env.nome_do_ambiente no objeto process.env  do Node.

Instalação

Basta usar o seguinte comando:

npm i custom-env

Uso

require('custom-env').env()

Por padrão, custom-env escolhe o arquivo .env para seu estágio do desenvolvimento. No entanto, para personalizar para um estágio diferente, adicione o nome como um sufixo, como em .env.nome_do_ambiente.

Exemplo

Podemos definir uma variável de ambiente personalizada para um desenvolvimento de teste.

  • Crie um arquivo .env.staging
  • Defina suas variáveis
APP_ENV=staging
APP_NAME=custom environment app
DB_HOST=localhost
DB_USER=user
DB_PASS=pass
  • Acesse suas variáveis
// Solicite o custom-env e defina seu arquivo env preferencial

require ('custom-env').env('staging')

console.log(process.env.APP_ENV)

console.log(process.env.APP_NAME)

console.log(process.env.DB_HOST)

console.log(process.env.DB_PASS)

Resultado esperado

staging
custom environment app
localhost
user
pass

É isso, bem fácil. Sinta-se à vontade para definir mais variáveis para diferentes estágios que você achar necessário, como:

.env.testes, .env.staging, .env.servidor1, .env.servidor2, .env.localhost

Definir para o ambiente atual

Você pode dizer ao custom-env para usar uma configuração que corresponda ao seu estágio de desenvolvimento atual passando true para o método  env().

Exemplo

Arquivo: index.js

// Passe true para env() para fazer o método usar o estágio de ambiente atual.

require('custom-env').env(true)

console.log(process.env.APP_NAME)
console.log(process.env.USERNAME)
console.log(process.env.PASSKEY)

Agora, vamos definir um arquivo de configuração de staging:

Arquivo: .env.staging

APP_NAME=Staging Node App
USER_NAME=John
PASSKEY=J*h*

Vamos servir com o Node usando o arquivo de staging:

NODE_ENV=staging node index.js

Resultado esperado

7tb8GikXlYKDDLXQoSaVwvOKfAxsG9iOVcNz
Obtém as variáveis de acordo com o ambiente de staging.

Ai está!

Documentação completa

Para a documentação completa do custom-env, visite a página do npm https://www.npmjs.com/package/custom-env

Código-fonte

Você pode contribuir com o código fonte do custom-env em https://github.com/erisanolasheni/custom-env

Boa programação!