Saltar al contenido principal
eLearner.app
Módulo 8 · Lección 1 de 429/32 en el curso~12 min
Lecciones del módulo (1/4)

Módulos ESM: import / export

Cuando un programa crece, tener todo en un solo archivo se vuelve incómodo. El JavaScript moderno resuelve el problema con los módulos ES (ESM): cada archivo es un módulo que puede exportar funciones, constantes, clases, y otros archivos pueden importarlas.

export

Exportas lo que quieres hacer público. Dos formas:

JS
// somma.js
export function somma(a, b) {
  return a + b;
}

export const PI = 3.14159;

O bien, al final del archivo:

JS
function somma(a, b) {
  return a + b;
}
const PI = 3.14159;
export { somma, PI };

import

Desde otro archivo:

JS
// app.js
import { somma, PI } from './somma.js';

console.log(somma(1, 2)); // 3
console.log(PI); // 3.14159

El objeto { somma, PI } es la lista de los nombres que quieres importar. Deben coincidir con los nombres exportados.

Default export

Cada módulo puede tener un export "principal", sin nombre:

JS
// log.js
export default function log(msg) {
  console.log('[app]', msg);
}

Se importa eligiendo localmente el nombre:

JS
import log from './log.js';
log('ciao');

Renombrar

JS
import { somma as plus } from './somma.js';
export { somma as add } from './somma.js'; // re-export

Un solo "namespace" por archivo

Los módulos están aislados: una variable declarada en un archivo no termina en el ámbito global. Debes exportarla explícitamente para que sea visible en otros lugares. Esto es una gran mejora con respecto al antiguo JS en el que cada <script> compartía window.

Pruébalo tú

En los ejercicios a continuación no escribirás la sintaxis real de import/export, ya que el sandbox consta de un solo archivo. En su lugar, te pediremos que organices el código en pequeñas funciones separadas que colaboren entre sí, tal como lo harías si cada una estuviera en un archivo diferente.

Ejercicio#js.m8.l1.e1
Intentos: 0Cargando...

Define dos funciones separadas: `square(n)` (devuelve n*n) y `sumOfSquares(a, b)` que use square. Piensa en square como si estuviera 'exportada' de un archivo y fuera reutilizada por sumOfSquares.

Cargando editor...
Mostrar pista

sumOfSquares(a,b) = square(a) + square(b)

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#js.m8.l1.e2
Intentos: 0Cargando...

Define `isEven(n)` (true si n es par) y `countEven(arr)` que use isEven para contar los elementos pares de un array. Mantenlas como dos funciones separadas.

Cargando editor...
Mostrar pista

arr.filter(isEven).length

Solución disponible después de 3 intentos