Configuração de aplicações JavaScript (Node.js)
Qualquer aplicação Node.js moderna requer gerenciamento flexível de configurações: parâmetros de banco de dados, chaves de API, portas, níveis de registro. A configuração correta não é apenas ler arquivos, mas toda uma cultura de segurança, testabilidade e portabilidade. Neste artigo, abordaremos as principais bibliotecas e abordagens que ajudarão você a organizar a configuração em projetos JavaScript (Node.js).
Por que ferramentas separadas para configuração são necessárias?
O gerenciamento manual via process.env ou arquivos JSON rapidamente leva ao caos. Entre os principais problemas:
- Misturar segredos (senhas) com o código — ameaça à segurança se for parar no repositório.
- Falta de validação — um erro de digitação no nome da variável pode causar um erro difícil de detectar.
- Dificuldade em suportar diferentes ambientes (dev, staging, production).
1. dotenv — padrão para variáveis de ambiente
A biblioteca mais popular (mais de 25 milhões de downloads por semana). Carrega variáveis do arquivo .env para process.env. Ideal para desenvolvimento local.
Instalação e configuração básica
npm install dotenvCrie um arquivo .env na raiz do projeto:
PORT=3000DB_HOST=localhostDB_USER=adminDB_PASS=secret123Inclua no início do seu arquivo principal (por exemplo, app.js):
require('dotenv').config();
const express = require('express');const app = express();
app.listen(process.env.PORT, () => { console.log(`Server running on port ${process.env.PORT}`);});Importante: nunca commite o .env no Git! Adicione-o ao .gitignore. Em vez disso, crie um .env.example com um modelo.
Caminho personalizado e vários arquivos
// Carregar de um caminho específicorequire('dotenv').config({ path: '/custom/path/.env' });
// Suporte a vários ambientesif (process.env.NODE_ENV === 'production') { require('dotenv').config({ path: '.env.production' });} else { require('dotenv').config({ path: '.env.development' });}2. config — configuração hierárquica
A biblioteca config (dos criadores do node-config) oferece um sistema poderoso com configurações padrão, substituição para ambientes e suporte a diferentes formatos (JSON, YAML, JS).
Estrutura de pastas
config/ default.json # Configurações básicas production.json # Substituições de produção development.json # Substituições locais custom-environment-variables.json # Mapeamento para process.envExemplo de default.json:
{ "server": { "port": 3000, "host": "localhost" }, "db": { "host": "localhost", "port": 5432, "name": "myapp" }}Uso no código:
const config = require('config');
const dbConfig = config.get('db');console.log(`Connecting to ${dbConfig.host}:${dbConfig.port}/${dbConfig.name}`);Destaque: seleciona automaticamente o arquivo com base em NODE_ENV. Se NODE_ENV=production, mescla default.json + production.json.
3. nconf — hierarquia flexível de fontes
nconf permite combinar várias fontes de configurações com prioridades: argumentos de linha de comando → variáveis de ambiente → arquivos → valores padrão.
const nconf = require('nconf');
// Definir hierarquia (do topo — maior prioridade)nconf .argv() // Argumentos de linha de comando .env('__') // Variáveis de ambiente (separador __ para aninhamento) .file({ file: 'config.json' }) // Arquivo de configu