Export e Import
Las directivas export e import son esenciales para trabajar con módulos en JavaScript. En este artículo, exploraremos a fondo cómo utilizarlas, con ejemplos prácticos que harán que domines este tema como un profesional. 🚀
🏷️ Export antes de las sentencias Cualquier cosa en JavaScript puede “etiquetarse” como exportable: variables, funciones, clases, ¡tú eliges! Solo necesitas anteponer export. Por ejemplo:
// Exportar un arrayexport let months = [ "Jan", "Feb", "Mar", "Apr", "Aug", "Sep", "Oct", "Nov", "Dec",];
// Exportar una constanteexport const MODULES_BECAME_STANDARD_YEAR = 2015;
// Exportar una claseexport class User { constructor(name) { this.name = name; }}✂️ Export por separado
No es obligatorio exportar algo justo al declararlo. Puedes exportar todo junto más abajo en el archivo. Ejemplo:
// 📁 say.jsfunction sayHi(user) { alert(`Hello, ${user}!`);}
function sayBye(user) { alert(`Bye, ${user}!`);}
// Exportar al finalexport { sayHi, sayBye };Esto te permite estructurar tu código primero y luego decidir qué quieres hacer público. 🧐
🌌 Importar todo con import *
¿Demasiadas cosas para importar? ¡Agrúpalas en un solo objeto! Así:
// 📁 main.jsimport * as say from "./say.js";
say.sayHi("John"); // Hello, John!say.sayBye("John"); // Bye, John!📋 Ventajas de importar explícitamente:
- Usas nombres más cortos:
sayHi()en lugar de say.sayHi(). - Tienes un panorama más claro de lo que estás usando y dónde. Esto ayuda mucho en la refactorización.
🧩 Importar y exportar con alias
¿Necesitas cambiar el nombre de algo para hacerlo más claro? Usa as:
// 📁 main.jsimport { sayHi as hi, sayBye as bye } from "./say.js";
hi("John"); // Hello, John!bye("John"); // Bye, John!Lo mismo aplica al exportar:
// 📁 say.jsexport { sayHi as hi, sayBye as bye };Ahora, al importar, puedes usar estos nombres más amigables. 🌟
⭐ Export default: El especial
Cuando un módulo tiene una “estrella principal”, como una clase o función que representa su propósito, usamos export default:
// 📁 user.jsexport default class User { constructor(name) { this.name = name; }}La gran ventaja: no necesitas llaves al importar, y puedes nombrarla como quieras:
// 📁 main.jsimport User from "./user.js";
new User("John");¡Súper limpio y fácil de usar! 🎉
🤝 Exportaciones con nombre vs default
| Export con nombre | Export default |
|---|---|
export class User {...} | export default class User |
import { User } | import User |
🔄 Reexportación: Modularizando como un pro
La reexportación te permite organizar tu código en módulos más pequeños, exponiendo solo lo necesario desde un punto central. Ejemplo:
// 📁 auth/index.jsexport { login, logout } from "./user.js";export { default as User } from "./user.js";Ahora, quien quiera usar tu paquete puede hacerlo de forma sencilla:
import { login, logout } from "auth/index.js";import User from "auth/index.js";🗂️ Este enfoque es perfecto para proyectos grandes con muchas dependencias internas. ¡Organización al máximo! 🚀