Ir al contenido

Versiones distintas por app

Dos micro-apps pueden declarar versiones mayores distintas del mismo paquete y cada una recibe la suya. Es lo que Module Federation resuelve con un scope compartido y negociación en tiempo de ejecución; aquí no hay negociación.

Declara lo que necesitas donde siempre:

mf-legacy/package.json
{ "dependencies": { "react": "^18.3.1" } }
mf-nueva/package.json
{ "dependencies": { "react": "^19.0.0" } }

wu install detecta el conflicto e instala la versión perdedora bajo un alias de npm:

! react: legacy needs v18 → alias react--18
! 2 major version conflict(s) — using npm aliases

En el package.json raíz quedan las dos:

{
"react": "^19.0.0",
"react--18": "npm:react@^18.3.1"
}

Y se escribe .wu-deps.json, indexado por el directorio de la app:

{ "mf-legacy": { "react": "react--18", "react-dom": "react-dom--18" } }

En desarrollo, el servidor resuelve /@modules/react por petición, a partir de la cabecera Referer: sabe qué app pide el módulo y le devuelve el suyo.

En producción, wu build inyecta un resolve.alias en la configuración de Vite de esa app, así que su bundle se lleva su versión.

Verificado sirviendo de verdad: mf-nueva recibe React 19.2.8, mf-legacy recibe 18.3.1, y las dos montan en la misma página con sus contadores independientes.

Por qué esto no se puede hacer con un import map

Sección titulada «Por qué esto no se puede hacer con un import map»

Un import map es del documento: uno por página. Las herramientas que se apoyan solo en import maps —Native Federation, single-spa con import maps— no pueden dar a dos apps versiones distintas del mismo especificador. No es que no lo hayan implementado; la especificación no lo permite.

wu resuelve por petición, no por documento, y por eso sí puede.

Las versiones se fijan al construir. Si necesitas que equipos independientes desplieguen con versiones divergentes sin reconstruir el shell, eso es negociación en tiempo de ejecución y lo hace Module Federation, no wu.

Lo que wu cubre es la migración gradual: subir una app a la versión nueva sin tocar las demás, y desplegarlas juntas.

Ventana de terminal
wu doctor

Avisa si una clave de .wu-deps.json no corresponde a ningún directorio real. Ese fallo desactiva la función entera sin dar ningún error: la detección imprime bien, npm instala bien, y solo el resultado está mal. (wu doctor hace seis chequeos más; este es el que toca a esta página.)