Configuración de aplicaciones JavaScript (Node.js)
Cualquier aplicación moderna de Node.js requiere una gestión flexible de la configuración: parámetros de base de datos, claves de API, puertos, niveles de registro. La configuración correcta no es solo leer archivos, sino toda una cultura de seguridad, capacidad de prueba y portabilidad. En este artículo, analizaremos las bibliotecas y enfoques clave que le ayudarán a organizar la configuración en proyectos de JavaScript (Node.js).
¿Por qué se necesitan herramientas separadas para la configuración?
La gestión manual a través de process.env o archivos JSON rápidamente lleva al caos. Entre los principales problemas:
- Mezclar secretos (contraseñas) con el código: una amenaza de seguridad si se suben al repositorio.
- Falta de validación: un error tipográfico en el nombre de una variable puede causar un error difícil de detectar.
- Dificultad para mantener diferentes entornos (dev, staging, production).
1. dotenv — estándar para variables de entorno
La biblioteca más popular (más de 25 millones de descargas por semana). Carga variables desde el archivo .env a process.env. Ideal para el desarrollo local.
Instalación y configuración básica
npm install dotenvCree un archivo .env en la raíz del proyecto:
PORT=3000DB_HOST=localhostDB_USER=adminDB_PASS=secret123Conéctelo al principio de su archivo principal (por ejemplo, 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 haga commit del archivo .env en Git! Añádalo a .gitignore. En su lugar, cree un .env.example con una plantilla.
Ruta personalizada y múltiples archivos
// Carga desde una ruta específicarequire('dotenv').config({ path: '/custom/path/.env' });
// Soporte para múltiples entornosif (process.env.NODE_ENV === 'production') { require('dotenv').config({ path: '.env.production' });} else { require('dotenv').config({ path: '.env.development' });}2. config — configuración jerárquica
La biblioteca config (de los creadores de node-config) ofrece un potente sistema con configuraciones predeterminadas, anulación para entornos y soporte para diferentes formatos (JSON, YAML, JS).
Estructura de carpetas
config/ default.json # Configuraciones base production.json # Anulaciones para producción development.json # Anulaciones locales custom-environment-variables.json # Mapeo a process.envEjemplo de default.json:
{ "server": { "port": 3000, "host": "localhost" }, "db": { "host": "localhost", "port": 5432, "name": "myapp" }}Uso en el código:
const config = require('config');
const dbConfig = config.get('db');console.log(`Connecting to ${dbConfig.host}:${dbConfig.port}/${dbConfig.name}`);Característica: selecciona automáticamente el archivo según NODE_ENV. Si NODE_ENV=production, combina default.json + production.json.
3. nconf — jerarquía flexible de fuentes
nconf permite combinar múltiples fuentes de configuración con prioridades: argumentos de línea de comandos → variables de entorno → archivos → valores predeterminados.
const nconf = require('nconf');
// Definimos la jerarquía (arriba = mayor prioridad)nconf .argv() // Argumentos de línea de comandos .env('__') // Variables de entorno (separador __ para anidamiento) .file({ file: 'config.json' }) // Archivo de configuración También en la biblioteca
once_cell en Rust: guía completa con ejemplos prácticos
OkHttp para Kotlin: guía completa con ejemplos
Autorización y autenticación en JavaScript (Node.js): guía completa