Configuración de aplicaciones TypeScript: resumen de herramientas y enfoques
En el desarrollo moderno con TypeScript, la organización correcta de la configuración de la aplicación es una de las tareas clave. De cómo gestiones los ajustes depende la seguridad, portabilidad y capacidad de prueba del código. En este artículo, revisaremos las principales bibliotecas y herramientas para la configuración de aplicaciones TypeScript, sus características y ejemplos de uso.
¿Por qué es importante una configuración correcta?
La configuración incluye:
- Variables de entorno (claves API, URL de base de datos)
- Parámetros del entorno (development, staging, production)
- Ajustes de frameworks y bibliotecas
- Datos secretos (contraseñas, tokens)
El uso de TypeScript añade las ventajas de la tipificación estricta, lo que permite evitar errores en la etapa de compilación. Veamos las mejores herramientas para trabajar con la configuración.
1. dotenv — herramienta básica para variables de entorno
La biblioteca dotenv carga variables desde el archivo .env en process.env. En TypeScript se usa a menudo con tipos adicionales.
Instalación
npm install dotenvnpm install -D @types/node # para tipos de process.envEjemplo 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 || '',};Ventajas: simplicidad, ligereza, estándar de facto.
Desventajas: no tiene validación, todos los valores son cadenas.
2. config — configuración jerárquica para Node.js
La biblioteca config permite organizar archivos de configuración por entornos (default.json, production.json, development.json).
Instalación
npm install confignpm install -D @types/configEjemplo de estructura
// 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 en dev, 8080 en productionVentajas: jerarquía, selección automática del entorno, soporte para TypeScript.
Desventajas: requiere sistema de archivos, no es adecuado para serverless.
3. convict — configuración con esquema y validación
convict permite definir un esquema estricto de configuración con tipos, valores predeterminados y validación.
Instalación
npm install convictnpm install -D @types/convictEjemplo
import convict from 'convict';
const config = convict({ env: { doc: 'Entorno de la aplicación', format: ['production', 'development', 'test'], default: 'development', env: 'NODE_ENV' }, port: { doc: 'Puerto de enlace', format: 'port', default: 3000, env: 'PORT' }, db: { host: { doc: 'Host de la base de datos', format: String, default: 'localhost', env: 'DB_HOST' }, port: { doc: 'Puerto de la base de datos', format: 'port', default: 5432, env: 'DB_PORT' } }