Skip to main content

Bibliotecas de terceiros

Este guia explica como um dev de tema instala uma lib npm (carrossel, animação, utilitários) e garante que o mesmo código rode no Editor, no /preview e na vitrine publicada. A Corvex não precisa conhecer a biblioteca — ela compila e serve o bundle do tema. A lógica da lib fica no seu repositório, não no core da plataforma.

Modelo mental


Passo a passo

1. package.json no tema

O corvex init já cria um package.json no scaffold. Se o projeto for antigo, adicione manualmente na raiz do tema:

2. Instalar a lib

Na pasta do tema:

3. Usar na section (código do tema)

Prefira encapsular em lib/ ou hook local — não espalhe lógica imperativa no JSX da section.

4. Build

O CLI (corvex build) usa esbuild e gera:

5. Sync na loja

Isso faz build, envia o bundle para a API, instala na loja vinculada e abre o Editor. Importante: node_modules nunca é enviado. Só o que foi compilado em .corvex/theme.js.

O que entra no bundle vs. o que o host fornece

O host carrega seu bundle e injeta dependências externas — uma única instância de React e runtime Corvex para Editor e vitrine. Não importe o pacote do editor. Use só @corvex/runtime e @corvex/theme-sdk.

CSS de libs npm

O esbuild trata import 'lib/dist/style.css' como texto — esse CSS não entra automaticamente em .corvex/theme.css. Para carrossel sem lib imperativa, prefira o cookbook Slider (React + CSS) — zero dependência npm.

Editor vs. preview vs. vitrine

Regra: depois de corvex build, rode corvex sync para Builder e /preview mostrarem o mesmo artifact.

Libs que mexem no DOM (Flickity, Swiper imperativo)

A plataforma reparenta blocks ao mover/deletar no editor. Libs que montam viewport/slider próprio podem quebrar no builder. Contrato do tema: prefira carrossel em React + CSS. Lib que monta o slider no DOM não tem evento público de teardown.
  1. Implemente mount/unmount no tema (lib/useSlideshowFlickity.js ou similar) e destrua a instância no cleanup do useEffect.
  2. No iframe do Editor, sincronize estilos antes de medir altura (viewport 0 quebra mount):
A plataforma não monta Flickity nem verifica a saúde do carrossel. Isso fica no tema.

Carrossel no editor

useBuilderBlockEditLayout() existe e sempre retorna false. Não desligue o carrossel nem troque a árvore com esse hook. O inspecionar não muda o layout. Detalhe: Runtime API.

Blocks + carrossel horizontal

Erro comum: tratar children como lista de slides. No editor, children é quase sempre um BlockCanvasRoot com todos os blocks dentro.
CSS: flex no track e largura em .my-carousel__track > .cx-block. Armadilhas: Erros do editor. Carrossel com vídeo da biblioteca: leia Carrossel de vídeos (Reels) — HLS, marquee e loop de requisições são armadilhas comuns na vitrine.

Checklist antes de publicar

  • npm install na raiz do tema (não na pasta da section)
  • corvex validate . passa
  • corvex build . passa sem erro de resolução de módulo
  • CSS da lib coberto (styles.css, assets/ ou injeção no hook)
  • Testado no Editor (iframe) e em /preview
  • Lib imperativa: destroy no cleanup do useEffect
  • corvex sync após build para alinhar draft e catálogo
  • .corvex/ e node_modules/ no .gitignore

Limitações atuais


Referências