Capítulo 01: O Compilador Svelte, Vite e Anatomia do Componente
Especialização Frontend com Svelte • Svelte 5 & SvelteKit • Capítulo 01
🗺️ Mapa Conceitual do Tópico
flowchart TD
SRC["Arquivo .svelte (HTML + script + style)"] --> COMP["Compilador Svelte 5 (Vite Plugin)"]
COMP --> JS["JavaScript Puro Cirúrgico (DOM Updates)"]
COMP --> CSS["CSS Scoped com Hashing de Classe"]
JS --> BROWSER["Execução Ultra-rápida no Navegador (Zero Virtual DOM)"]
style SRC fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style COMP fill:#ffecb3,stroke:#ffa000,stroke-width:2px
style JS fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style BROWSER fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
🏛️ 1. Fundamentos e Diretrizes Técnicas
1. Filosofia: Compilação vs Interpretação em Tempo de Execução
Ao contrário de frameworks tradicionais como React ou Vue que enviam uma biblioteca de runtime e uma camada de Virtual DOM (VDOM) para o navegador, o Svelte é um compilador. Durante o build (via Vite e @sveltejs/vite-plugin-svelte), o código declarativo é convertido em instruções imperativas enxutas que manipulam diretamente os nós do DOM real.
2. Anatomia de um Componente Svelte
Um componente Svelte reside em um arquivo .svelte e agrega três seções essenciais:
<script lang="ts">: Lógica TypeScript e estado reativo.<template>implícito: Marcação HTML enriquecida com interpolações{expressao}e diretivas.<style>: Estilos CSS com escopo estritamente local aplicados via classes únicas geradas pelo compilador.
3. Vantagens Arquiteturais
- Zero Overhead de VDOM: Não há cálculo de diff de árvores inteiras de objetos JavaScript em memória.
- Bundle Mínimo: Apenas o código estritamente necessário é enviado ao cliente.
- Performance Nativa: Tempo de resposta instantâneo a eventos de usuário.
💻 2. Código de Demonstração Corporativo
<script lang="ts">
let tecnologia: string = 'Svelte 5';
let versao: string = '5.0.0';
</script>
<div class="card">
<h2>Bem-vindo ao {tecnologia}!</h2>
<p>Versão em execução: <strong>{versao}</strong></p>
</div>
<style>
.card {
padding: 1.5rem;
border-radius: 8px;
background: #fafafa;
border: 1px solid #e0e0e0;
}
h2 {
color: #ff3e00;
}
</style>