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.
Dois caminhos de construção
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.
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.
{ "build": { "keepPreviousBuilds": 2 } }
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 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.
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.
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.
Orçamentos por app
{ "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.
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.
Publicar e verificar um build assinado
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.
Referência de implementação
wu-cli/src/commands/build.zigwu-cli/src/commands/build-native.cjswu-cli/src/commands/deploy.zigwu-cli/src/commands/build_cache.zigwu-cli/tests/build-deploy.test.cjswu-cli/tests/build-native-pages.test.cjswu-cli/tests/build-failures.test.cjswu-cli/tests/build-shares-adapter-runtime.test.cjs