vitral/vite
Plugin de build do remote. Gera o JS, o CSS com escopo e o vitral.json.
ts
vitral(options?: VitralViteOptions): PluginUso
js
// vite.config.js
import react from '@vitejs/plugin-react'
import vitral from 'vitral/vite'
export default { plugins: [react(), vitral({ entry: 'src/remote.tsx', dedupe: ['react'] })] }Opções
| Opção | Padrão | O que faz |
|---|---|---|
entry | src/remote.* ou src/App.* | Arquivo cujo export default é o remote |
adapter | descoberto pelos plugins do Vite | react, vue, svelte, solid, preact, angular, element, ou false |
name | name do package.json | Nome no vitral.json |
version | version do package.json | Versão no vitral.json |
scopeCss | true | Prefixa o CSS |
theme | nenhum | 'host'. Veja Estilos |
layers | nenhum | 'flatten'. Veja Estilos |
renameRegisteredProperties | false | Veja Estilos |
exposes | nenhum | Mapa './nome' → arquivo. Veja Exposes |
dedupe | nenhum | Veja Dedupe |
types | true | Gera vitral.d.ts |
contract | nenhum | { version }: versão do contrato no vitral.json. Veja Contrato |
sbom | false | Gera sbom.cdx.json (CycloneDX 1.6). Veja SBOM |
target | nenhum | 'mcp-app': gera só mcp-app.html, com JS e CSS inline. Veja MCP App |
compileHints | false | Compile hint do V8 nos arquivos que rodam ao montar. Veja Carregamento |
versionDir | false | Grava o build em dist/<versão>/. Veja Canary e rollback |
next | false | Builda código escrito para Next.js (next/*, NEXT_PUBLIC_*, paths do tsconfig, .svg como componente). Veja Next.js |
sideEffectFree | nenhum | Pacotes tratados como sem efeitos colaterais, menos o CSS. Para pacote publicado como código-fonte sem sideEffects no package.json |
shared | nenhum | Obsoleta. Use dedupe |
Saída
dist/
remote-[hash].js
remote-[hash].css
vitral.json
vitral.d.ts
sbom.cdx.json (com sbom: true)Com target: 'mcp-app', só dist/mcp-app.html.
Observações
- Um
export defaultque já temmounté usado como está. - Em
vite dev, serve umvitral.jsonde desenvolvimento, com CORS e sem SRI. - O build dividido lista em
split.lazyos chunks que o remote só baixa depois (import()das rotas), parapreload(nome, { routes: true }).