Módulos: import y export

Ningún proyecto real vive en un solo archivo. Así se reparte el código entre varios.

Hasta ahora todos tus ejemplos viven en un solo archivo. Funciona para tutoriales, pero un proyecto real —como los juegos de este sitio— tiene cientos de funciones: mezclarlas todas en un archivo se vuelve imposible de mantener.

Un módulo es, en la práctica, un archivo .js que exporta las piezas que quiere compartir, para que otro archivo las importe.

Con export nombrado puedes compartir tantas cosas como quieras desde un mismo archivo: funciones, variables, objetos.

// archivo: puntaje.js

export function calcularBono(puntos) {
  return Math.round(puntos * 0.1);
}

export const VIDAS_INICIALES = 3;

Desde otro archivo, import trae exactamente lo que necesitas, con el nombre exacto entre llaves.

// archivo: juego.js
import { calcularBono, VIDAS_INICIALES } from "./puntaje.js";

let vidas = VIDAS_INICIALES;
console.log("Bono:", calcularBono(1500));

Y en el HTML, el <script> que arranca todo debe llevar type="module" para que import/export funcionen:

<script type="module" src="juego.js"></script>

Cuando un archivo tiene una cosa principal para compartir, se usa export default. Al importarlo, le puedes poner el nombre que quieras —no tiene que coincidir con nada.

// archivo: jugador.js
export default class Jugador {
  constructor(nombre) {
    this.nombre = nombre;
    this.puntos = 0;
  }
}

// archivo: juego.js
import Jugador from "./jugador.js";   // sin llaves, y con el nombre que quieras

const j = new Jugador("Joaco");

Cómo y por qué dividir un proyecto en varios archivos, la diferencia entre export nombrado y export default, y que el HTML necesita type="module" para que todo esto funcione.

Última parada del curso: fechas y expresiones regulares en JavaScript, el equivalente a lo que ya viste del lado de Python.