Executando verificação de segurança...
6

Trabalhando com Ambientes no NodeJs

🏡 Ambientes

Bem, já sabemos que na maioria das vezes todos os nosso projetos contam com variáveis de ambiente como URL do banco de dados, tokens e etc.
Também sabemos o quão chato é lidar com vários arquivos .env, como:

.env.env.local.env.test

E se existisse uma forma de melhorar essas definições? Melhorar como tratamos, adicionar funções de soma, fallback e etc? Bem, essa é a proposta da minha biblioteca Mozz.Env.

🍃 Solução

Mozz é uma biblioteca para JavaScript que visa facilitar o manuseio das variaveis de cada ambiente de uma aplicação. Por exemplo, você pode definir ambientes para desenvolvimento, testes e produção, como:

{
    "environments": {
        "development": {
            "@mozz:dotenv": ".env.local",
            "database_url": "$env('DATABASE_URL')",
            "server_port": "$env('PORT', 3000)"
        },
        "test": {
            "@mozz:dotenv": ".env.test",
            "database_url": "$env('DATABASE_URL')",
            "server_port": "$env('PORT', 3000)"
        },
        "production": {
            "@mozz:dotenv": ".env",
            "database_url": "$env('DATABASE_URL')",
            "server_port": "$env('PORT', 3000)"
        }
    }
}

Note que, agora, definimos três ambientes e em cada um deles usamos uma função, sendo ela:

  • $env('VARIABLE', fallback?)

Essa função pega uma variável do arquivo .env que é passada no seu primeiro argumento, caso essa variável retorne um valor nullish usará o valor passado como fallback (o segundo argumento), entretanto, caso esse valor não exista a biblioteca disparará um erro (sendo o mesmo suprimido apenas com a opção allowUndefinedValues ativa).

Também definimos uma propriedade chamada @mozz:dotenv em cada ambiente, essa propriedade serve para indicar a biblioteca qual arquivo com os "secrets" deverá ser carregado.

Bem, mas como dizemos a nossa aplicação para usar os valores de um ambiente especifico? Apenas defina a variável MOZZ_ENV no seu arquivo .env raiz indicando o ambiente. Exemplo:

MOZZ_ENV="development"

Agora, para utilizar a biblioteca dentro do código da sua aplicação apenas importe e instancie-a como no exemplo abaixo:

import Mzz from 'mozz.env'

const Enhancer = new Mzz()

console.log(Enhancer.env.database_url) // -> Your Database URL from .env file

Não sei se consegui explicar muito bem o funcionamento da biblioteca, mas tentei! Qualquer coisa podem dar uma olhada no repositório (e talvez deixar uma estrela?) aqui.

Carregando publicação patrocinada...