TIPS: Como crio minhas configurações de ambientes em NodeJS
Quer uma dica de como simplificar as variáveis de ambientes?
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.js
em 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.