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.
Cómo funciona
Sección titulada «Cómo funciona»Declara lo que necesitas donde siempre:
{ "dependencies": { "react": "^18.3.1" } }{ "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 aliasesEn 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" } }Los dos lados lo aplican
Sección titulada «Los dos lados lo aplican»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.
El límite, dicho claro
Sección titulada «El límite, dicho claro»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.
Comprobarlo
Sección titulada «Comprobarlo»wu doctorAvisa 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.)
