Módulos
Módulos Fundamental
Section titled “Módulos ”Exportación Básico
Section titled “Exportación ”Exportaciones nombradas
Section titled “Exportaciones nombradas”export const sumar = (a, b) => a + b;export const restar = (a, b) => a - b;
export class Calculadora { static multiplicar(a, b) { return a * b; }}
// También puedes exportar al finalconst PI = 3.14159;export { PI };Exportación por defecto
Section titled “Exportación por defecto”export default class Usuario { constructor(nombre) { this.nombre = nombre; }}
// O tambiénconst config = { api: 'https://api.ejemplo.com', timeout: 5000};
export default config;Importación Importante
Section titled “Importación ”Importaciones básicas
Section titled “Importaciones básicas”// Importar exportaciones nombradasimport { sumar, restar } from './matematica.js';
// Importar con aliasimport { sumar as suma, restar as resta } from './matematica.js';
// Importar todo como un objetoimport * as Matematica from './matematica.js';
// Importar exportación por defectoimport Usuario from './usuario.js';
// Combinar importacionesimport Usuario, { roles } from './usuario.js';Importaciones dinámicas
Section titled “Importaciones dinámicas”// Importación dinámicaasync function cargarModulo() { try { const modulo = await import('./modulo.js'); modulo.inicializar(); } catch (error) { console.error('Error al cargar el módulo:', error); }}
// O con then/catchimport('./modulo.js') .then(modulo => modulo.inicializar()) .catch(error => console.error(error));Agregación de módulos Avanzado
Section titled “Agregación de módulos ”Re-exportación
Section titled “Re-exportación”export { default as Usuario } from './usuario.js';export { Roles } from './roles.js';export { Permisos } from './permisos.js';
// usoimport { Usuario, Roles, Permisos } from './modulos';Barrel pattern
Section titled “Barrel pattern”export * from './autenticacion.js';export * from './usuarios.js';export * from './productos.js';
// usoimport { login, obtenerUsuario, listarProductos} from './servicios';Mejores prácticas Recomendado
Section titled “Mejores prácticas ”Organización de archivos
Section titled “Organización de archivos”// ✅ Buenosrc/components/ Button/ index.js // Exporta el componente styles.js // Estilos utils.js // Utilidades constants.js // Constantesservices/ api.js auth.jsutils/ index.js // Re-exporta utilidades comunes format.js validate.jsImportaciones limpias
Section titled “Importaciones limpias”// ❌ Maloimport { cosa1, cosa2, cosa3, cosa4, cosa5} from './modulo-grande';
// ✅ Buenoimport { cosa1, cosa2, cosa3, cosa4, cosa5} from './modulo-grande';
// ✅ Mejor (si se usan todas)import * as ModuloGrande from './modulo-grande';Exportaciones consistentes
Section titled “Exportaciones consistentes”// ❌ Malo - Mezclando estilosexport const funcion1 = () => {};const funcion2 = () => {};export { funcion2 };export default class {};
// ✅ Bueno - Exportaciones al finalconst funcion1 = () => {};const funcion2 = () => {};class Principal {}
export { funcion1, funcion2, Principal as default};Módulos puros
Section titled “Módulos puros”// ❌ Malo - Efectos secundarios en móduloconsole.log('Módulo cargado');inicializarBaseDatos();configurarAPI();
export function utilidad() {}
// ✅ Bueno - Sin efectos secundariosexport function inicializar() { console.log('Inicializando...'); inicializarBaseDatos(); configurarAPI();}
export function utilidad() {}Lazy loading
Section titled “Lazy loading”// Componente que usa lazy loadingasync function cargarVisualizador() { const { Visualizador } = await import( /* webpackChunkName: "visualizador" */ './componentes/Visualizador' );
return new Visualizador();}
// Usoboton.addEventListener('click', async () => { const visualizador = await cargarVisualizador(); visualizador.mostrar(datos);});
🐝