Configuração de aplicações TypeScript: visão geral de ferramentas e abordagens
No desenvolvimento moderno com TypeScript, a organização correta da configuração da aplicação é uma das tarefas-chave. A segurança, portabilidade e testabilidade do código dependem de como você gerencia as configurações. Neste artigo, examinaremos as principais bibliotecas e ferramentas para configuração de aplicações TypeScript, suas características e exemplos de uso.
Por que a configuração correta é importante?
A configuração inclui:
- Variáveis de ambiente (chaves de API, URL do banco de dados)
- Parâmetros de ambiente (development, staging, production)
- Configurações de frameworks e bibliotecas
- Dados secretos (senhas, tokens)
O uso do TypeScript adiciona as vantagens da tipagem estrita, o que permite evitar erros em tempo de compilação. Vamos examinar as melhores ferramentas para trabalhar com configuração.
1. dotenv — ferramenta básica para variáveis de ambiente
A biblioteca dotenv carrega variáveis do arquivo .env para process.env. No TypeScript, ela é frequentemente usada com tipos adicionais.
Instalação
npm install dotenvnpm install -D @types/node # para tipos do process.envExemplo de uso
// .envPORT=3000DATABASE_URL=mongodb://localhost:27017/mydbSECRET_KEY=mysecretkey
// config.tsimport dotenv from 'dotenv';dotenv.config();
interface AppConfig { port: number; databaseUrl: string; secretKey: string;}
export const config: AppConfig = { port: parseInt(process.env.PORT || '3000', 10), databaseUrl: process.env.DATABASE_URL || '', secretKey: process.env.SECRET_KEY || '',};Prós: simplicidade, leveza, padrão de facto.
Contras: sem validação, todos os valores são strings.
2. config — configuração hierárquica para Node.js
A biblioteca config permite organizar arquivos de configuração por ambientes (default.json, production.json, development.json).
Instalação
npm install confignpm install -D @types/configExemplo de estrutura
// config/default.json{ "server": { "port": 3000 }, "db": { "host": "localhost", "port": 27017 }}
// config/production.json{ "server": { "port": 8080 }, "db": { "host": "production-db.example.com" }}
// app.tsimport config from 'config';
interface ServerConfig { port: number;}
const serverConfig = config.get<ServerConfig>('server');console.log(serverConfig.port); // 3000 em dev, 8080 em productionPrós: hierarquia, seleção automática de ambiente, suporte a TypeScript.
Contras: requer sistema de arquivos, não é adequado para serverless.
3. convict — configuração com esquema e validação
convict permite definir um esquema estrito de configuração com tipos, valores padrão e validação.
Instalação
npm install convictnpm install -D @types/convictExemplo
import convict from 'convict';
const config = convict({ env: { doc: 'Ambiente da aplicação', format: ['production', 'development', 'test'], default: 'development', env: 'NODE_ENV' }, port: { doc: 'Porta para vincular', format: 'port', default: 3000, env: 'PORT' }, db: { host: { doc: 'Host do banco de dados', format: String, default: 'localhost', env: 'DB_HOST' }, port: { doc: 'Porta do banco de dados', format: 'port', default: 5432, env: 'DB_PORT' } } Também na biblioteca
Trabalhando com Excel em C++: bibliotecas e ferramentas para leitura e escrita
Validação de dados em Swift (iOS/macOS): melhores práticas e ferramentas
Boost.Filesystem para C++: guia completo com exemplos práticos
Envio de email em JavaScript (Node.js): Nodemailer, SendGrid, Mailgun