WU / DOCSUNIVERSAL MICROFRONTENDS
ES

Configuración y descubrimiento

Campos realmente leídos de wu.config.json, puertos, comandos y metadatos de montaje.

Consulta las versiones, cambios y requisitos en Framework 4.0 y CLI 1.2.

Archivo de proyecto

Los comandos buscan wu.config.json en el directorio de trabajo. No hay un flag global --config ni un comando wu config. Las rutas se interpretan desde la raíz donde se ejecuta la CLI.

{
  "name": "conocimiento",
  "version": "1.1.0",
  "shell": {
    "dir": "shell",
    "framework": "astro",
    "port": 4321,
    "dev_cmd": "npx astro dev",
    "build_cmd": "npx astro build"
  },
  "apps": [
    {
      "name": "busqueda",
      "dir": "mf-busqueda",
      "framework": "react",
      "port": 5001,
      "dev_cmd": "npx vite",
      "build_cmd": "npx vite build"
    },
    {
      "name": "explorador",
      "dir": "mf-explorador",
      "framework": "vue",
      "port": 5002
    }
  ],
  "proxy": {
    "port": 3000,
    "open_browser": false,
    "/api": {
      "target": "http://127.0.0.1:8080",
      "rewrite": true,
      "cors": false
    }
  },
  "shared": ["react", "react-dom/client"],
  "security": {
    "enabled": true
  }
}

version es metadato de configuración. El ejecutable sigue utilizando la versión compilada en main.zig; editar ese campo no actualiza la CLI.

Shell y aplicaciones

Campo Valor por defecto Uso
shell.dir shell Directorio del anfitrión
shell.framework vanilla Selecciona tratamiento del shell
shell.port 4321 Puerto del proceso en modo Vite
shell.dev_cmd Cadena vacía Comando del shell en modo Vite
shell.build_cmd Cadena vacía Con fallback a Astro, Next o Vite según framework
apps[].name Cadena vacía Identificador de app para el catálogo
apps[].dir Cadena vacía Directorio local y clave de overrides
apps[].framework vanilla Selección de compilador/plantilla
apps[].port 0 Puerto de la app en modo Vite
apps[].dev_cmd npx vite Comando de desarrollo legado
apps[].build_cmd npx vite build Comando de construcción

El parser acepta únicamente los campos que consume. No valida una topología completa como lo haría un esquema estricto: muchos valores de tipo incorrecto mantienen el valor por defecto. Declara explícitamente nombres, directorios y puertos, y revisa el resultado con wu info.

Metadatos que llegan al navegador

Campo en cada app Valores / significado
fullBleed o full_bleed Booleano para que el shell pueda conceder ancho completo
domOwnership o dom_ownership wu, app o light
nativeShadow o native_shadow Alias legado opcional; conviene expresar ownership explícito
grants Lista de capacidades que el host concede como máximo
compatibility strict o v2

Estos campos viajan al catálogo de desarrollo y al resultado de build. Conceder un grant en el host no sustituye la solicitud correspondiente en wu.json. fullBleed comunica una preferencia de presentación; el shell debe consumirla al disponer el contenedor.

Proxy y puertos

En modo nativo, la prioridad de puerto es wu dev --port, después proxy.port, después 3000. La prioridad de apertura es --open o --no-open, después proxy.open_browser, cuyo defecto es true.

Cada clave de proxy que empieza con / define una regla. Puede ser una cadena con el origen destino o un objeto con target, rewrite y cors. rewrite: true retira el prefijo: /api/users se reenvía como /users. cors es optativo.

El proxy implementado admite orígenes http://; rechaza TLS/https://, credenciales y destinos ambiguos. No declares una URL con rutas como si fuera un origen. Los puertos de shell y apps pertenecen al modo de procesos Vite; no crean listeners separados en el servidor nativo.

Opciones nuevas de desarrollo y build

{
  "dev": { "allowedHosts": ["mi-tunel.example.com"] },
  "build": { "keepPreviousBuilds": 2 },
  "security": { "upgradeInsecureRequests": false }
}

dev.allowedHosts (allowed_hosts) amplía los hosts permitidos para Host, CORS y WebSocket; no cambia la interfaz de escucha. build.keepPreviousBuilds (keep_previous_builds) conserva archivos con hash de builds anteriores, con defecto 2. security.upgradeInsecureRequests (upgrade_insecure_requests) fuerza la directiva CSP; si falta, WU la omite cuando hsts es off o hay orígenes HTTP configurados.

Al recargar configuración se conservan grants, modo de manifest y opciones de layout. Las apps añadidas pasan al router y al watcher; una escritura sin cambios no fuerza recarga. Directorios ./mf-a o mf-a/ se normalizan como mf-a.

Descubrimiento automático

Si falta el archivo, varios comandos inspeccionan subdirectorios inmediatos y reconocen señales de proyecto y dependencias. Solo el directorio llamado exactamente shell se convierte en shell. Los demás candidatos se tratan como microapps.

El descubrimiento reconoce el adaptador importado y nombres exactos de dependencias: Preact no se confunde con React y Qwik/Stencil se detectan. Ordena directorios y asigna puertos libres desde 5001 sin colisionar con el shell; los puertos explícitos se respetan.

La detección usa heurísticas; no replica toda la matriz de plantillas ni sustituye la intención de un manifiesto explícito. Con un JSON malformado se informa el error y se desactiva el descubrimiento para evitar operar sobre una topología accidental. Corrige el archivo antes de seguir.

CLI 1.2.0 acepta manifest: "define" en cada app y security.frameOrigins para los iframes remotos. Los orígenes de frames solo entran en frame-src; no habilitan scripts ni conexiones del host. El filtro de navegación de catálogos no bloquea su lectura por fetch. Consulta apps remotas y build.

Referencia de implementación

  • wu-cli/src/config/config.zig
  • wu-cli/src/config/discovery.zig
  • wu-cli/src/runtime/allowed_hosts.zig
  • wu-cli/src/runtime/dev/config_reload.zig
  • wu-cli/src/runtime/handlers/proxy.zig
WU SE CONSTRUYE CONTIGO

¿Encontraste un bug? ¿Tienes una idea?

Tu experiencia mejora WU. Cuéntanos qué falla o ayuda a sostener su desarrollo.