Configuração de aplicações JavaScript (Node.js): melhores bibliotecas e práticas
A configuração é uma parte essencial de qualquer aplicação moderna. No ecossistema Node.js, existem várias abordagens e bibliotecas que ajudam a gerenciar de forma flexível as configurações, parâmetros de ambiente e dados secretos. Neste artigo, veremos as ferramentas mais populares para configuração de aplicações em JavaScript (Node.js), suas características e exemplos de uso.
Por que é necessária uma configuração separada?
Armazenar configurações diretamente no código é uma má prática. Motivos:
- Segurança: senhas, chaves de API e tokens não devem ir para o repositório;
- Flexibilidade: diferentes ambientes (development, staging, production) exigem parâmetros diferentes;
- Conveniência: o gerenciamento centralizado simplifica a manutenção e a escalabilidade.
1. dotenv — simplicidade e popularidade
dotenv é a biblioteca mais comum para trabalhar com variáveis de ambiente. Ela carrega as configurações do arquivo .env para process.env.
Instalação:
npm install dotenvExemplo de uso:
// arquivo .envPORT=3000DB_HOST=localhostDB_USER=adminDB_PASS=secret123
// app.jsrequire('dotenv').config();
const express = require('express');const app = express();const port = process.env.PORT || 3000;
app.listen(port, () => { console.log(`Servidor rodando na porta ${port}`);});Vantagens: minimalismo, comunidade enorme, suporte a TypeScript através de tipagem.
Desvantagens: sem validação, todos os valores são strings, difícil gerenciar estruturas complexas.
2. convict — validação rigorosa e esquema
convict permite definir um esquema de configuração com tipos, valores padrão e regras de validação.
Instalação:
npm install convictExemplo:
// config.jsconst convict = require('convict');
const config = convict({ env: { doc: 'Ambiente da aplicação', format: ['production', 'development', 'test'], default: 'development', env: 'NODE_ENV' }, port: { doc: 'Porta do servidor', format: 'port', default: 3000, env: 'PORT' }, db: { host: { doc: 'Host do banco de dados', format: String, default: 'localhost', env: 'DB_HOST' }, password: { doc: 'Senha do BD', format: String, default: '', env: 'DB_PASS', sensitive: true } }});
config.validate({ allowed: 'strict' });module.exports = config;Uso na aplicação:
const config = require('./config');console.log(config.get('db.host')); // localhostconsole.log(config.get('port')); // 3000Vantagens: tipagem rigorosa, validação embutida, suporte a dados sensíveis.
Desvantagens: requer mais código para o esquema, menos flexível em cenários dinâmicos.
3. nconf — abordagem hierárquica
nconf permite combinar várias fontes de configuração com prioridades: argumentos de linha de comando, variáveis de ambiente, arquivos, objetos.
Instalação:
npm install nconfExemplo:
const nconf = require('nconf');
// Definindo a ordem das fontes (prioridade de cima para baixo)nconf .argv() // 1. Argumentos de linha de comando .env({ separator: '__' }) // 2. Variáveis de ambiente (DB__HOST → db:host) .file({ file: 'config.json' }); // 3. Arquivo de configuração
// Valor padrãonconf.defaults({ app: { port: 8080 }}); Também na biblioteca
Aprendizado de Máquina em PHP: visão geral das bibliotecas para integração de ML
Eloquent ORM para PHP: guia completo com exemplos