50% OFF Plus
--:--:--
¡Obtener!

Configuración de producción

Intermedio
Node
Node
Actualizado: 20/06/2025

¡Desbloquea el curso de Node completo!

IA
Ejercicios
Certificado
Entrar

Mira la lección en vídeo

Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.

Desbloquear Plan Plus

Modo development vs modo production

En el desarrollo de aplicaciones Node.js, es fundamental distinguir entre dos entornos de ejecución principales: development (desarrollo) y production (producción). Cada uno tiene características específicas que afectan el comportamiento, rendimiento y seguridad de la aplicación.

Diferencias fundamentales entre entornos

El entorno de desarrollo está optimizado para facilitar la programación y depuración. En este modo, Node.js proporciona información detallada sobre errores, mantiene archivos de log extensos y no aplica optimizaciones que podrían dificultar el debugging. Por el contrario, el entorno de producción prioriza el rendimiento, la seguridad y la estabilidad, ocultando información sensible y aplicando optimizaciones que mejoran la velocidad de ejecución.

La variable de entorno NODE_ENV es el mecanismo estándar para indicar a Node.js en qué modo debe ejecutarse:

// Verificar el entorno actual
console.log('Entorno actual:', process.env.NODE_ENV);

// Lógica condicional basada en el entorno
if (process.env.NODE_ENV === 'production') {
    console.log('Ejecutándose en producción');
} else {
    console.log('Ejecutándose en desarrollo');
}

Configuración específica por entorno

Una práctica común es crear configuraciones diferenciadas para cada entorno. Esto permite ajustar parámetros como puertos, niveles de logging y configuraciones de seguridad:

// config.js
const config = {
    development: {
        port: 3000,
        logLevel: 'debug',
        showErrors: true,
        cacheEnabled: false
    },
    production: {
        port: process.env.PORT || 8080,
        logLevel: 'error',
        showErrors: false,
        cacheEnabled: true
    }
};

const currentEnv = process.env.NODE_ENV || 'development';
module.exports = config[currentEnv];

Manejo de errores según el entorno

El tratamiento de errores debe adaptarse al entorno de ejecución. En desarrollo, es útil mostrar stack traces completos y información detallada, mientras que en producción se debe ocultar esta información por seguridad:

// server.js
const config = require('./config');

function handleError(error, req, res) {
    console.error('Error:', error.message);
    
    if (config.showErrors) {
        // En desarrollo: mostrar detalles completos
        res.writeHead(500, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({
            error: error.message,
            stack: error.stack,
            timestamp: new Date().toISOString()
        }));
    } else {
        // En producción: respuesta genérica
        res.writeHead(500, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({
            error: 'Error interno del servidor'
        }));
    }
}

Optimizaciones de rendimiento

Node.js aplica diferentes optimizaciones según el entorno. En producción, el motor V8 utiliza estrategias más agresivas de optimización y garbage collection:

// Ejemplo de configuración de memoria para producción
if (process.env.NODE_ENV === 'production') {
    // Configurar límites de memoria más estrictos
    process.env.NODE_OPTIONS = '--max-old-space-size=2048';
}

// Configuración de caché condicional
const cache = new Map();

function getData(key) {
    if (process.env.NODE_ENV === 'production' && cache.has(key)) {
        return cache.get(key);
    }
    
    const data = expensiveOperation(key);
    
    if (process.env.NODE_ENV === 'production') {
        cache.set(key, data);
    }
    
    return data;
}

Logging diferenciado

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

El sistema de logging debe comportarse de manera distinta en cada entorno. En desarrollo, los logs pueden ser más verbosos y incluir información de debugging, mientras que en producción deben ser concisos y enfocarse en errores críticos:

// logger.js
const fs = require('fs');
const path = require('path');

class Logger {
    constructor() {
        this.isDevelopment = process.env.NODE_ENV !== 'production';
        this.logFile = path.join(__dirname, 'app.log');
    }
    
    log(level, message) {
        const timestamp = new Date().toISOString();
        const logEntry = `[${timestamp}] ${level.toUpperCase()}: ${message}\n`;
        
        if (this.isDevelopment) {
            // En desarrollo: mostrar en consola con colores
            console.log(logEntry.trim());
        } else {
            // En producción: escribir solo a archivo
            fs.appendFileSync(this.logFile, logEntry);
        }
    }
    
    debug(message) {
        if (this.isDevelopment) {
            this.log('debug', message);
        }
    }
    
    error(message) {
        this.log('error', message);
    }
}

module.exports = new Logger();

Establecer el entorno de ejecución

Para configurar el entorno, puedes establecer la variable NODE_ENV de varias formas:

Mediante línea de comandos:

# Ejecutar en modo desarrollo
NODE_ENV=development node server.js

# Ejecutar en modo producción
NODE_ENV=production node server.js

Mediante scripts en package.json:

{
  "scripts": {
    "dev": "NODE_ENV=development node server.js",
    "start": "NODE_ENV=production node server.js"
  }
}

Mediante archivos de configuración del sistema:

# En sistemas Unix/Linux, agregar al .bashrc o .profile
export NODE_ENV=production

Esta diferenciación entre entornos es esencial para desarrollar aplicaciones Node.js robustas y seguras, permitiendo un desarrollo ágil mientras se mantiene un comportamiento optimizado en producción.

Aprendizajes de esta lección de Node

  • Comprender la diferencia entre los modos development y production en Node.js.
  • Aprender a utilizar la variable de entorno NODE_ENV para definir el entorno de ejecución.
  • Configurar parámetros específicos según el entorno, como puertos y niveles de logging.
  • Implementar un manejo de errores adaptado a cada entorno.
  • Aplicar optimizaciones de rendimiento y logging diferenciados para producción y desarrollo.

Completa este curso de Node y certifícate

Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración