# Servir un build de producción

Modos estático y SPA, rutas, caché, CSP y comprobación del sitio publicado.

Requiere WU CLI `1.2.0` y, para las APIs de las aplicaciones, WU Framework `4.0.0`. Comprueba `wu --version` y las dependencias del proyecto.

```sh
wu build
wu serve 4100 --mode static
```

`wu serve [port] [--mode spa|static]` sirve `dist/` en `127.0.0.1`. El puerto predeterminado es `3000` y el modo predeterminado es `spa`. Un puerto inválido, ocupado o la falta de `dist/index.html` producen una salida distinta de cero. Detén el servidor con `Ctrl+C`.

Usa `static` para documentación y sitios multipágina: `/guide/` entrega `dist/guide/index.html`, `/guide?lang=en` redirige conservando la query y una ruta desconocida devuelve `404`. Usa `spa` si el shell controla las rutas de cliente: la navegación desconocida recibe el índice raíz. Los assets inexistentes devuelven `404` en ambos modos, nunca el HTML del shell.

HTML, manifests y nombres estables usan revalidación y `no-transform`. Solo un nombre con prefijo SHA-256 verificado de 12–64 caracteres recibe caché immutable de un año. GET y HEAD comparten cabeceras; HEAD no envía cuerpo. El servidor no negocia ETag/304. Los catálogos siguen disponibles para fetch aunque una navegación directa reciba 404: ese filtro no convierte los manifests en información secreta.

La CSP generada calcula hashes del HTML de cada respuesta. Una política literal sigue bajo control del host. TLS, compresión y acceso público corresponden al hosting o reverse proxy. Aplica `_headers`, `vercel.json` o `wu-security.conf` según el proveedor y revisa el resultado con [doctor remoto](/es/docs/cli/doctor/).