# Construir para produção

Escolha o build por toolchains ou nativo, configure PWA e orçamentos e verifique os artefatos.

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.

<span id="dos-caminos-de-construcción"></span>

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

## Dois caminhos de construção

```sh
wu build
wu build --native
wu serve 4100
```

`wu build` mantém o caminho por toolchains: constrói shell e apps pelos seus comandos, reúne `dist/`, escreve manifests e gera políticas HTTP. `wu build --native` inicia o servidor WU em produção, percorre o grafo de módulos e publica as respostas como arquivos estáticos. Escolha um caminho por build e verifique o resultado no navegador.

| Opção | Efeito |
| --- | --- |
| `--native` | Constrói a partir das respostas do servidor WU. |
| `--no-pwa` | Desativa PWA neste build nativo. |
| `--budget-warn` | Transforma excesso de orçamento em aviso. |
| `--jobs <n>`, `-j <n>` | Entre 1 e 64 builds simultâneos; padrão `min(CPU, 4)`. |
| `--no-cache` | Não reutiliza saídas de `.wu-cache/builds/`. |
| `--sign <key.pem>` | Assina `dist/wu-integrity.json` com ECDSA P-256. |

Não há flags `--watch`, `--app`, `--out-dir` ou `--minify`. Falha de compilação, app sem saída, arquivo sem permissão de escrita ou orçamento excedido retorna `1`. O build trabalha em `dist.tmp-<id>/` e só substitui `dist/` quando termina com sucesso; uma falha preserva o build anterior e deixa evidências em `dist.failed/`. Um segundo build concorrente é rejeitado por `.wu-cache/build.lock`.

<span id="caché-de-compilación-y-builds-anteriores"></span>

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

## Cache de compilação e builds anteriores

Apps sem mudanças recuperam a saída de `.wu-cache/builds/`. A chave inclui fontes locais, `.env*`, manifesto raiz, lockfiles, overrides, comando, framework, módulos compartilhados e versão da CLI. Imports fora do diretório da app e edições em `node_modules` não são detectados: use `--no-cache`. No Windows, variáveis do processo também ficam de fora; evite reutilizar a cache após alterá-las.

`build.keepPreviousBuilds` preserva arquivos com hash de dois builds anteriores por padrão; `0` mantém apenas o atual. O registro privado `dist/.wu-builds.json` permite que abas antigas continuem carregando seus chunks. Em CI limpo, preserve `dist/` entre builds ou use um host que retenha esses arquivos. HTML, manifestos e service worker pertencem apenas ao build atual.

```json
{ "build": { "keepPreviousBuilds": 2 } }
```

<span id="un-runtime-compartido"></span>

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

## Um runtime compartilhado

A CLI detecta imports de `wu-framework` e subpaths do navegador, compartilha core e cria o import map do build convencional. Para externalizar esses imports, `build_cmd` precisa expor `vite build` diretamente. Um comando opaco como `npm run build` pode impedir a inclusão de externals e aliases; verifique avisos e requisições de módulos.

`wu create` prepara `shared` para os frameworks gerados e `wu add` o amplia. Compartilhar React ou Preact inclui o runtime JSX emitido pelo compilador. Importe explicitamente os [subsistemas opcionais](/pt/docs/framework/runtime-composition/) usados pelo shell. Se faltar uma toolchain local, execute `wu install`; não presuma que a CLI substituirá por uma versão da raiz.

Import maps são inseridos ou mesclados em todas as páginas HTML, após `<head>`; fragmentos e arquivos maiores que 8 MiB são ignorados. Compartilhar um adaptador Qwik ou Svelte também compartilha seu runtime. Entradas geradas pelo WU incluem SRI nos scripts e modulepreloads, e `integrity` no import map. Os scripts auxiliares gerados são externos.

<span id="qué-publica-el-build-nativo"></span>

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

## O que o build nativo publica

O build nativo percorre todas as páginas do shell e entradas de apps. Publica módulos, CSS e assets com nomes derivados de SHA-256, substituindo o antigo `?v=<build>`. Conteúdo intacto mantém sua URL e identidade de módulo. Erros de compilação interrompem o build em vez de publicar o módulo de overlay.

Imports dinâmicos com URLs calculadas não são descobertos seguindo imports literais. `.module.css` ainda mantém a injeção de estilo do servidor de desenvolvimento. Verifique esses casos antes de escolher o build nativo; mantenha o build por toolchains quando a aplicação precisar de outro processamento.

<span id="pwa-caché-y-actualizaciones"></span>

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

## PWA, cache e atualizações

O build nativo gera `wu-sw.js`, `wu-sw-register.js`, `manifest.webmanifest` e ícone quando PWA está ativo. Pré-carrega arquivos descobertos; navegação e catálogos tentam a rede primeiro e usam cache offline. Dados de APIs externas e arquivos fora do grafo descoberto não entram automaticamente no cache.

`pwa: false` na raiz de `wu.config.json` ou `--no-pwa` desativa a geração. Um manifest existente do shell é preservado. O worker serve apps instaladas em `/@wuapp/` pelo cache `wu-apps` e o mantém ao atualizar o build. Escute `wu:update-available` e `wu:sw` se o shell precisar mostrar o estado da atualização.

O novo worker espera enquanto outras janelas estiverem abertas. O evento `wu:update-available` expõe `event.detail.activate()` para que o shell decida quando ativar a substituição. Navegações offline recuperam sua própria página; APIs da mesma origem não entram automaticamente na cache do site.

<span id="presupuestos-por-app"></span>

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

## Orçamentos por app

```json
{ "budget": "150kb", "apps": [
  { "name": "cart", "dir": "mf-cart", "framework": "react", "port": 5001, "budget": "80kb" }
] }
```

O orçamento da app prevalece sobre o da raiz. Aceita bytes numéricos ou unidades como `80kb` e `1.5mb`, com base 1024. Conta `.js`, `.mjs` e `.css` sem compressão; imagens e fontes ficam de fora. Excedê-lo retorna `1` e preserva o `dist/` anterior. `--budget-warn` mantém o aviso sem falhar o build. É um limite do projeto, não uma comparação de desempenho com outros frameworks.

<span id="revisar-el-resultado"></span>

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

## Verificar o resultado

Confira `dist/wu-manifest.json`, entradas das apps, `_headers`, `vercel.json` e `wu-security.conf`. Sirva `dist/`, recarregue rotas internas, monte cada app e verifique CSS, comunicação e console. Teste também recarga offline ao usar PWA. Para distribuir uma app, continue em [wu pack](/pt/docs/cli/pack/).

<span id="publicar-y-verificar-un-build-firmado"></span>

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

## Publicar e verificar um build assinado

```sh
wu pack --keygen keys/deploy.pem
wu build --sign keys/deploy.pem
wu doctor --url https://example.com --integrity --pubkey keys/deploy.pub.json --json
```

Salve a JWK pública impressa por `--keygen` em `keys/deploy.pub.json`. Publique todo o `dist/`, incluindo `wu-integrity.json`, com os arquivos de política do mesmo build. O manifesto assinado registra hashes, tipos, import maps e CSP por página. `doctor --integrity` verifica a assinatura e as respostas; sem `--pubkey`, verifica apenas a chave incluída no manifesto, não uma identidade confiável.

O CDN deve preservar bytes, MIME, CSP e import maps: uma transformação automática após a assinatura invalida a verificação. Use cache imutável apenas para arquivos com hash e revalide HTML, manifestos e worker. Não exclua chunks anteriores durante a retenção. WU gera políticas por página para `_headers`, `vercel.json` e `wu-security.conf`, preserva o `_headers` do shell e avisa sobre limites de regras e comprimento de linhas do Cloudflare.

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

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

## Referência de implementação

- `wu-cli/src/commands/build.zig`
- `wu-cli/src/commands/build-native.cjs`
- `wu-cli/src/commands/deploy.zig`
- `wu-cli/src/commands/build_cache.zig`
- `wu-cli/tests/build-deploy.test.cjs`
- `wu-cli/tests/build-native-pages.test.cjs`
- `wu-cli/tests/build-failures.test.cjs`
- `wu-cli/tests/build-shares-adapter-runtime.test.cjs`