Dependencias y versiones por app
Qué agrega wu install, cómo resuelve majors y cuándo crea toolchains locales.
Instalar desde declaraciones de cada parte
wu install
wu i es un alias. El comando agrega las declaraciones de shell y apps, edita el manifiesto raíz e invoca npm. Añade wu-framework y esbuild del catálogo si nadie los declara. wu add y el asistente de wu create utilizan el mismo instalador.
Añade dependencias a la microapp que las necesita o al shell que las consume, y vuelve a ejecutar wu install. Ejecutar solamente npm install en la raíz no recalcula el agregado ni .wu-deps.json.
Resolución de bibliotecas
Los rangos compatibles se intersectan: ^19.0.0 y ^19.3.0 producen ^19.3.0. Los grupos incompatibles usan aliases; el grupo más nuevo conserva el nombre principal. Se distinguen las líneas 0.x (zone.js--0.15) y los pins incompatibles dentro de un mismo major (lodash--4.17.20). Cada paquete aparece en una sola sección raíz; dependencies prevalece si alguna app lo declara allí.
{
"dependencies": {
"react": "^19.0.0",
"react--17": "npm:react@^17.0.0"
}
}
El mapa de overrides enlaza cada import original con el alias correcto:
{
"mf-legacy": {
"react": "react--17"
}
}
Las claves son directorios, como mf-legacy, y no nombres de catálogo, como legacy. Desarrollo y build cargan ese mapa. No significa que todos los consumidores de React compartan una sola instancia: cada conjunto compatible debe resolver la identidad correcta.
La resolución admite ^, ~, comparadores, versiones exactas, comodines, versiones parciales, rangos con guion y hasta 32 alternativas ||. No aplica la regla adicional de npm que limita prereleases a la misma terna del comparador: revisa la versión instalada cuando uses prereleases. Los valores no SemVer, como dist-tags o URLs Git, se conservan como pins explícitos y las declaraciones diferentes generan un aviso.
Identidad de módulos en desarrollo
Cada import se resuelve desde el archivo que lo escribe: respeta node_modules locales y anidados, pnpm, enlaces y .wu-deps.json. Las URLs identifican versión y ubicación. Los paquetes de shared, y siempre wu-framework, se resuelven desde la raíz como una sola instancia; una copia local incompatible genera un aviso. No pongas en shared una biblioteca que deba coexistir en versiones distintas.
Toolchains distintas
Vite, plugins y otras herramientas de compilación necesitan una estrategia diferente. El algoritmo elige el major con más declaraciones entre las apps que todavía comparten raíz; empates favorecen el mayor. Las aplicaciones incompatibles pasan a instalación local. La decisión se repite porque retirar los votos de una app puede cambiar otra mayoría.
{
"mf-vite-antiguo": {
"_toolchain": "local"
}
}
La CLI instala dentro de esa app y el build usa su node_modules/vite. El mapa se reescribe en cada instalación o se elimina si ya no quedan overrides. Los árboles locales gestionados por WU llevan información de procedencia para poder retirarlos cuando dejan de ser necesarios.
Dependencias locales
Una declaración file: se conserva y se reexpresa desde la raíz. Por ejemplo, file:../ui dentro de mf-panel/package.json se convierte en una ruta hacia ui/ desde el manifiesto agregado. Las declaraciones link: y workspace: se omiten en el colector actual; este mecanismo no implementa un gestor de workspaces npm completo.
Reescritura del manifiesto raíz
Un manifiesto raíz sin _wu se rechaza con salida 1. --force autoriza gestionarlo conservando sus campos y dependencias; si el JSON está roto, lo reemplaza y conserva el original en package.json.bak.
wu install --force
--force o -f pertenecen a WU: habilitan la reescritura, no son un passthrough general de opciones de npm. No hay opciones públicas --frozen-lockfile, --offline, --no-install ni selector de package manager.
_wu.managed registra las dependencias escritas por WU y permite retirar solo las que ya no declara ninguna app. Se conservan scripts propios, workspaces, overrides, engines y dependencias añadidas a mano. dev y build se crean solo si faltan. Los JSON se escriben atómicamente con copia .bak; una marca _wu antigua se migra en la primera instalación.
Migrar un proyecto a CLI 1.2
wu update actualiza la herramienta global. wu upgrade compara shell y apps con el catálogo de la CLI instalada, que en 1.2.0 propone WU Framework ^4.0.0. Revisa primero la migración del framework: actualizar rangos no migra automáticamente todas sus APIs.
wu upgrade --dry-run
wu upgrade --json
wu upgrade --yes
wu install
wu doctor --json
wu build
Sin flags, upgrade muestra el plan y pide confirmación. --dry-run no escribe; --json solo aplica con --yes; --check devuelve 2 cuando hay cambios pendientes. Nunca rebaja versiones: conserva rangos más nuevos, abiertos y protocolos no SemVer. Los pins exactos requieren --force, que tampoco permite rebajarlos. Informa dependencias ausentes sin añadirlas. Un error o una confirmación sin terminal devuelve 1.
Las migraciones reconocen plantillas antiguas y guardan <file>.bak: tags Stencil únicos, retirada de @stencil/core sin uso, shell Astro con APIs DOM, selectores con CSS.escape, reglas faltantes de .gitignore y runtimes Qwik/Svelte en shared. Los cambios son idempotentes; las fuentes personalizadas que no coinciden se dejan intactas con un aviso. El comando no instala dependencias: termina con wu install.
Ejemplo de rangos: un wu-framework: ^3.2.1 declarado pasa a ^4.0.0; un react: ^19.4.0 se conserva porque supera el catálogo ^19.3.0; react: 19.2.0 conserva su pin salvo --force. No añadas manualmente _wu.managed: lo mantiene wu install.
Salidas y errores
Un JSON inválido en la configuración o en un manifiesto de app detiene la instalación con línea, columna y salida 1, antes de escribir. También salen con 1 los fallos de escritura, el manifiesto raíz ajeno sin --force y los fallos de npm en raíz o toolchains locales. Con conflictos de bibliotecas, la invocación raíz incluye --legacy-peer-deps.
Referencia de implementación
wu-cli/src/commands/install.zigwu-cli/src/commands/upgrade.zigwu-cli/src/commands/codemods.zigwu-cli/src/config/semver.zigwu-cli/src/config/json_doc.zigwu-cli/src/runtime/module_graph.zigwu-cli/tests/install-preserva.test.cjswu-cli/tests/upgrade.test.cjswu-cli/tests/dev-module-resolution.test.cjs