# Empacotar uma app com wu pack

Crie um .wuapp assinado a partir do build nativo e prepare a instalação em outro shell.

Requer WU CLI `1.2.0` e WU Framework `4.0.0` para as APIs das aplicações. Confira `wu --version` e as dependências do projeto.

```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
```

Execute os comandos no workspace. `catalog` é o nome em `dist/wu-manifest.json`, não necessariamente o diretório. `--keygen` retorna a JWK pública usada pelo `trust` do host; a chave privada fica no PEM.

| Argumento | Contrato |
| --- | --- |
| `<app>` | Nome da app no manifest de build. |
| `--dist <dir>` | Diretório do build; padrão `dist`. |
| `--out <file>` | Arquivo de saída; padrão `<name>-<version>.wuapp`. |
| `--version <version>` | Versão da app dentro do pacote. |
| `--sign <key.pem>` | Assina com uma chave privada ECDSA P-256. |
| `--keygen <key.pem>` | Gera a chave privada e imprime a pública; não empacota. |
| `--json` | Emite resultado ou erro em JSON. |

<span id="formato-y-resolución-de-módulos"></span>

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

## Formato e resolução de módulos

O formato `wuapp/1` é JSON comprimido com gzip. Contém nome, versão, entrada, manifest e arquivos com tipo, codificação, conteúdo e SHA-256. Imports JavaScript internos viram caminhos relativos e `?v=<build>` é removido. Referências `/@modules/` permanecem para módulos compartilhados do host; o pacote não inclui automaticamente todas as dependências do shell.

A versão vem de `--version`, do manifest da app, de seu `package.json` ou, por fim, de `0.0.0`. A assinatura cobre a representação canônica de formato, identidade, entrada, manifest e hashes. Sem `--sign`, o pacote não é assinado; o instalador exige autorização explícita para aceitá-lo.

<span id="resultado-y-errores"></span>

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

## Resultado e erros

A saída JSON inclui `out`, `name`, `version`, `entry`, `files`, `bytes`, `signed` e `publicKey`. Manifest de build ausente, app desconhecida, entrada ausente ou chave inválida gera saída `1`. `--version` indica a versão da app empacotada, não da WU CLI. Para verificar a assinatura e montar, siga [Instalar arquivos .wuapp](/pt/docs/framework/installable-apps/).

Na 1.2.0, `--keygen` recusa sobrescrever uma chave existente; `--force` permite essa substituição explícita. Assinaturas aceitam apenas ECDSA P-256. O empacotador atribui MIME por extensão e valida caminhos, tipos e limites segundo as regras do instalador. Nomes com hash do build nativo mantêm sua identidade dentro do pacote.

<span id="referencia-de-implementación"></span>

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

## Referência de implementação

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