# Adicionar e remover microapps

Scaffold incremental, atualização do projeto e remoção manual sem comandos inventados.

<span id="añadir-una-aplicación"></span>

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

## Adicionar uma aplicação

```bash
wu add vue explorador --no-install
wu add react busqueda --no-install
wu install
```

Execute `add` a partir da raiz do projeto. Os dois argumentos posicionais são **framework e nome**, nessa ordem. A única opção reconhecida é `--no-install`, que permite gerar várias apps e fazer uma única instalação ao terminar.

Sem `--no-install`, `add` usa o mesmo agregador e escritor de `wu install`, preserva os campos raiz e propaga falhas do npm. Se o manifesto raiz não tiver `_wu`, interrompe antes de gerar; use `--no-install` para declarar dependências manualmente ou adote o manifesto com `wu install --force`.

<span id="qué-escribe"></span>

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

## O que ele grava

1. Valida o framework e o nome e verifica se o diretório ainda não existe.
2. Busca uma porta livre após a maior usada pelas apps; se não houver espaço, busca a partir de 5001. Evita portas do shell e do proxy.
3. Gera `mf-<name>/` com `package.json`, ponto de entrada, componente e configuração do framework. Não grava um `wu.json` de origem.
4. Se a configuração veio de `wu.config.json`, inclui a nova app e regrava o arquivo.
5. Agrega as declarações do shell e das apps ao manifesto raiz gerenciado.
6. Instala com npm, exceto quando `--no-install` foi informado.

Declare dependências específicas na app ou shell que as consome. `add` preserva a configuração personalizada e amplia `shared` a partir do catálogo. Erros JSON incluem linha e coluna; não substituem uma configuração inválida por um arquivo novo.

<span id="nombres-y-typescript"></span>

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

## Nomes e TypeScript

`wu add react mf-checkout` remove o prefixo recebido e gera `mf-checkout/`; não duplica `mf-`. O mesmo vale para o prefixo `mf_`. Um nome vazio ou formado apenas por esse prefixo é rejeitado. Um diretório existente também causa falha.

O comando ativa TypeScript quando `supportsTs` permite, para corresponder ao modo rápido de `create`. HTMX, Alpine e Stimulus permanecem em JavaScript. Não há uma opção de `add` para selecionar JavaScript nos outros templates.

<span id="integrar-una-aplicación-existente"></span>

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

## Integrar uma aplicação existente

`add` gera uma aplicação nova. Para incluir uma já existente, declare uma entrada em `apps` com seu `name`, `dir`, `framework`, porta e comandos; adapte seu ponto de entrada ao registro WU e verifique `wu.json`. Depois execute `wu install`, `wu info`, `wu build` e valide sua montagem no navegador.

O nome identifica a app no catálogo do runtime. O diretório localiza arquivos e resolve overrides de dependências. Se você mudar um deles, revise os consumidores desse campo em vez de presumir que são intercambiáveis.

<span id="retirar-o-renombrar"></span>

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

## Remover ou renomear

Esta versão não implementa `wu remove` nem um comando para renomear. A remoção exige excluir a entrada de `apps`, atualizar a navegação e as referências de montagem e executar `wu install` para recalcular dependências e overrides. O diretório pode ser arquivado ou removido após a revisão dessas referências.

Renomear exige manter coerentes o diretório, `wu.config.json`, o nome registrado pelo adaptador, `wu.json` e os identificadores usados pelo shell. Execute `wu doctor` para encontrar referências obsoletas de diretório e reconstrua antes de publicar.

<span id="limitaciones-observadas"></span>

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

## Limitações observadas

Sem `wu.config.json`, `add` usa a descoberta para calcular dependências e portas, mas não escreve uma configuração nova. Prefira um projeto criado explicitamente para manter uma topologia estável. Falha ao escrever o scaffold remove o novo diretório; uma falha posterior de instalação é informada com saída `1`.

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

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

## Referência de implementação

- `wu-cli/src/commands/add.zig`
- `wu-cli/src/commands/install.zig`
- `wu-cli/src/config/names.zig`
- `wu-cli/tests/scaffold-writers.test.cjs`
- `wu-cli/tests/scaffold-security.test.cjs`