Script de migração
O que npx -p @decocms/start deco-migrate faz de fato.
@decocms/start provê três binários CLI sob bin . O carro-chefe é deco-migrate , que roda a migração v1 → v2 de ponta a ponta. Esta página documenta o que ele faz, quais flags aceita e o que não faz.
Início rápido
# de dentro do diretório da loja v1
npx -p @decocms/start deco-migrate
Pronto. O script analisa o layout, gera arquivos v2, transforma imports/JSX/APIs, limpa código morto, gera relatório, verifica e instala dependências.
Flags
| Flag | Função |
|---|---|
--source <dir> | Diretório de origem (default: cwd) |
--dry-run | Mostra o que aconteceria, sem escrever |
--verbose | Saída detalhada por transformação |
--no-compile | Pula o tsc --noEmit + vite build pós-transformação |
--no-cleanup-audit | Pula a auditoria pós-migração (read-only) |
--strict | Fail no run em qualquer warning de auditoria |
--with-build | Roda vite build completo (default só typecheck) |
--help , -h | Mostra ajuda |
As sete fases
Vindo de scripts/migrate.ts :
1. Análise — escaneia origem, detecta padrões Preact/Fresh/Deco
2. Scaffold — gera vite.config.ts, wrangler.jsonc, rotas, setup.ts, worker-entry
3. Transform — reescreve imports (70+ regras), atributos JSX, APIs Fresh, Deno-isms, Tailwind v3→v4
4. Cleanup — apaga islands/, rotas antigas, deno.json, move static/ → public/
5. Report — gera MIGRATION_REPORT.md com itens manuais
6. Verify — 18+ smoke tests (zero imports antigos, arquivos scaffolded existem)
7. Bootstrap — npm install, gera blocks do CMS, gera rotas
Depois da fase 7, opcionalmente:
- Compila (
--no-compilepara pular): rodatsc --noEmite (com--with-build)vite build. Falhas são reportadas, mas não fazem o run falhar a menos que--strict. - Auditoria de cleanup (
--no-cleanup-auditpara pular): auditoria read-only de padrões Fresh remanescentes. Aponta coisas como pastascompat/esquecidas ouuseScript(fn)perdidos.
Detecção de layout
A fase 0 (preflight) detecta o layout de origem:
- Clássico —
routes/na raiz,src/sections/para sections (o layout canônico de loja Fresh). - Outro — qualquer outra coisa (apps Fresh customizadas, monorepos, etc.).
Layouts não-clássicos abortam com mensagem de erro. O script é deliberadamente conservador — auto-migrar layout estranho corrompe mais do que ajuda.
Se você tem layout não-clássico, duas opções:
- Reorganize para clássico antes de rodar.
- Rode em
--dry-runpara ver o que ele faria, depois aplique manualmente seguindo o playbook.
O que MIGRATION_REPORT.md contém
Após um run real:
- Modo do run (DRY_RUN ou EXECUTED) e timestamp.
- Contagem de arquivos — scaffolded, transformados, deletados.
- Listas completas de arquivos por categoria.
- Inventário de loaders — todo
loaders/*.tseactions/*.tsencontrado, com status de port. - Pegadinhas Tailwind v3 → v4 —
z-indexnegativo, migrações de opacidade, reescritas de@apply. - Boilerplate duplicado de
@decocms/start— lugares onde o código migrado se sobrepõe a helpers do framework (candidatos a limpeza). - Próximos passos concretos — comandos exatos para rodar.
O relatório fica commitado no seu repositório, no caminho onde você rodou o script — mantenha versionado para que os reviewers possam auditar o que mudou.
Arquivo de configuração
Você pode fixar comportamento via .deco-migrate.config.json na raiz do projeto:
{
"exclude": ["src/legacy/**"],
"skipPhases": [],
"verbose": false
}
A maioria não precisa; defaults são razoáveis.
Scripts companheiros
deco-post-cleanup
Rode após a migração para limpar boilerplate que o framework já absorveu:
npx -p @decocms/start deco-post-cleanup
É read + write — revise o diff antes de commitar.
deco-htmx-analyze
Para sites que usavam HTMX no v1. Reporta uso para você planejar a conversão para padrões React. HTMX não vem em @decocms/start — sites que dependiam precisam reescrever para React.
npx -p @decocms/start deco-htmx-analyze
O que o script NÃO faz
- Não migra overrides de
useCart/useUser/useWishlist. Se sua loja v1 sobrescreveu, porte manualmente usando as factories v2. Veja Hooks VTEX. - Não migra lógica custom de worker. Proxies, harness AB, transforms de borda — o script gera um
worker-entry.tsbaunilha e deixa você camadear lógica custom em cima usandocreateDecoWorkerEntry. - Não corrige correção em runtime. Migração bem-sucedida produz código que compila; problemas em runtime (carrinho não carrega, PDP errado, mismatches de hidratação) precisam de atenção humana.
- Não traduz sites não-loja. Tunado para o arquétipo de loja deco.cx. Sites de marketing com setups Fresh muito custom devem esperar mais trabalho manual.
Troubleshooting
”Layout não clássico — abortando”
Seu routes/ ou src/ não parece com loja Fresh padrão. Reorganize ou faça manual.
tsc --noEmit falha após a migração
Leia MIGRATION_REPORT.md . Causas comuns:
- Hook de plataforma (
useCartetc.) que precisa de implementação específica do site. useScript(fn)que o script transformou mas o chamador não aceita.- Matcher ou loader custom usando APIs Deno-only.
vite build falha
Rode com --with-build para ver durante a migração. Depois leia o erro — a maioria são imports faltando causados por uma island que foi deletada mas ainda é referenciada.
Deploy de produção funciona mas preview do admin está quebrado
Provavelmente moveu handlers de admin para o server entry do TanStack em vez do worker entry. Veja Referência do worker entry.
Veja também
Found an error or want to improve this page?
Edit this page