TIPS: Como crio minhas configurações de ambientes em NodeJS

Configuração de ambiente é uma grande bagunça e existem diversas formas de fazer. Geralmente um arquivo .env, um json ou as configurações dentro do código(o que espero até esse ponto que você saiba q isso é uma péssima prática).

Gosto de usar a abordagem de configuração por json, isso me permite certa flexibilidade. Assim posso criar algo que reaja ao ambiente e adiciono ao sistema a configuração apropriada ao contexto.

Como exemplo vamos imaginar que eu queria ter as configurações de banco de dados. Seria basicamente um arquivo assim.

    {
        "DB": {
            "dev": { 
                "host": "localhost"
                "port": 3306
                "user": "admin",
                "password": ""
            },
            "prod": { 
                "host": "localhost"
                "port": 3306
                "user": "admin",
                "password": "$enh4-Sup3r-S3gur4"
            }
        }
    }

Agora basta iniciar a minha applicação setando a variavel de ambiente que desejo algo como APP_ENV=dev node index.jsem ambiente local ou APP_ENV=prod node index.js em ambiente de produção para pegar as configurações de produção.

A variavel APP_ENV pode ser o nome que você quiser desde que em maiusculas e separadas por underlines.

Dentro do index.js para usar a configuração é só ler a variavel usando o comando process.env e deixar que a variavel acesse a chave do objeto de configuração.

'use strict'
const config = require('.config.json');
const { APP_ENV } = process.env;
db.connection(config.DB[APP_ENV]);

Outra coisa importante é nunca commitar o .config.json, adicione ele ao seu .gitignore. Dessa forma você pode criar as configurações necessárias uma só vez e ir acessando na sua aplicação de acordo com a sua necessidade. O DB é só um exemplo, mas podem ser a chave de um serviço externo ou outras configurações, a criatividade agora é por sua conta. :)


NOTA: Após uma conversa inicial no grupo GuildaTech no telegram, com o texto e revisão notei algo importante que foi esquecido, o foco do texto é para ambientes em NodeJS, quando se trata de outras aplicações em que o deploy é mais demorado pode ser contraproducente usar essa forma. Aqui neste link também tem alguns contrapontos do porque usar as variaveis de ambiente, ou o arquivo .env usando uma lib como o dotenv, pode ser uma boa abordagem.


Alguma dúvida? Me chama no Twitter ou no Telegram no @flpms.