# Empaquetar una app con wu pack

Crea un archivo .wuapp firmado desde un build nativo y prepara su instalación en otro shell.

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 --native
wu pack --keygen keys/catalog.pem --json
wu pack catalog --sign keys/catalog.pem --version 1.2.0 --out catalog-1.2.0.wuapp --json
```

Ejecuta los comandos desde el workspace. `catalog` es el nombre en `dist/wu-manifest.json`, no necesariamente el nombre de carpeta. La salida de `--keygen` incluye la JWK pública que el host usará en `trust`; la clave privada permanece en el archivo PEM.

| Argumento | Contrato |
| --- | --- |
| `<app>` | Nombre de una app del manifiesto de build. |
| `--dist <dir>` | Directorio de build; defecto `dist`. |
| `--out <file>` | Archivo de salida; defecto `<name>-<version>.wuapp`. |
| `--version <version>` | Versión de la app dentro del paquete. |
| `--sign <key.pem>` | Firma con una clave privada ECDSA P-256. |
| `--keygen <key.pem>` | Genera una clave privada e imprime la pública; no empaqueta. |
| `--json` | Emite el resultado o error como JSON. |

<span class="section-anchor" id="section-1"></span>

## Formato y resolución de módulos

El formato `wuapp/1` es JSON comprimido con gzip. Incluye nombre, versión, entrada, manifest y archivos con tipo, codificación, contenido y SHA-256. Los imports JavaScript internos se convierten en rutas relativas y se retira `?v=<build>`. Las referencias `/@modules/` permanecen para usar módulos compartidos del host; el paquete no incluye automáticamente todas las dependencias del shell.

La versión se toma de `--version`, del manifest de la app, de su `package.json` o finalmente de `0.0.0`. La firma cubre la representación canónica de formato, identidad, entrada, manifest y hashes. Sin `--sign`, el resultado es un paquete sin firma; el instalador exige autorización explícita para aceptarlo.

<span class="section-anchor" id="section-2"></span>

## Resultado y errores

La salida JSON incluye `out`, `name`, `version`, `entry`, `files`, `bytes`, `signed` y `publicKey`. Un manifiesto de build ausente, app desconocida, entrada inexistente o clave inválida produce salida `1`. La versión indicada por `--version` pertenece a la app empaquetada, no a WU CLI. Para verificar la firma y montar el contenido, sigue [Instalar archivos .wuapp](/es/docs/framework/installable-apps/).

En 1.2.0, `--keygen` rechaza sobrescribir una clave existente; `--force` permite ese reemplazo explícito. Las firmas solo aceptan ECDSA P-256. El empaquetador asigna MIME por extensión y valida paths, tipos y límites según las reglas del instalador. Los nombres con hash del build nativo conservan su identidad dentro del paquete.

<span class="section-anchor" id="section-3"></span>

## Referencia de implementación

- `wu-cli/src/commands/pack.cjs`
- `wu-cli/tests/pack-safety.test.cjs`
- `wu-cli/tests/pack.test.cjs`