Volver a JavaScript Básico

Módulos (ES Modules)

Los ES Modules son la forma estándar de organizar y compartir código JavaScript.

Exportaciones con Nombre

// math.js export const PI = 3.14159; export function sumar(a, b) { return a + b; } export function multiplicar(a, b) { return a * b; }
// main.js import { PI, sumar, multiplicar } from './math.js'; console.log(sumar(2, 3)); // 5 console.log(PI); // 3.14159

Exportación por Defecto

// logger.js export default class Logger { constructor(prefijo) { this.prefijo = prefijo; } log(mensaje) { console.log(`[${this.prefijo}] ${mensaje}`); } }
// app.js import Logger from './logger.js'; const logger = new Logger("APP"); logger.log("Iniciado");

Importaciones Mixtas

import formatear, { VERSION, debounce } from './utils.js';

Renombrar al Importar / Exportar

import { sumar as suma, multiplicar as producto } from './math.js'; export { PI as pi, sumar as suma };

Re-exportaciones (Barrel Exports)

// index.js — agregar todas las exportaciones export { sumar, multiplicar, PI } from './math.js'; export { default as Logger } from './logger.js'; export * from './utils.js';
// Los consumidores importan desde un solo lugar import { sumar, Logger, debounce } from './lib/index.js';

Importaciones Dinámicas

// Cargar un módulo de forma perezosa (retorna una Promise) async function cargarGrafico() { const { Grafico } = await import('./grafico.js'); return new Grafico(document.getElementById("canvas")); } // Carga condicional if (usuario.esAdmin) { const { PanelAdmin } = await import('./admin.js'); PanelAdmin.init(); }

Los módulos son singletons — si múltiples archivos importan el mismo módulo, todos comparten la misma instancia. Esto los hace ideales para gestionar estado compartido.