# Especificação da Sintaxe SFC
# Introdução
Um arquivo *.vue é um formato de arquivo personalizado que usa sintaxe semelhante a HTML para descrever um componente Vue. Cada arquivo *.vue consiste em três tipos de blocos de linguagem no nível superior: <template>, <script> e <style> e, opcionalmente, blocos customizados adicionais:
<template>
  <div class="example">{{ msg }}</div>
</template>
<script>
export default {
  data() {
    return {
      msg: 'Olá mundo!'
    }
  }
}
</script>
<style>
.example {
  color: red;
}
</style>
<custom1>
  Isso poderia ser, ex.: documentação do componente.
</custom1>
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Blocos de Linguagem
# <template>
 Cada arquivo
*.vuepode conter no máximo um bloco<template>de nível superior por vez.O conteúdo será extraído e passado para
@vue/compiler-dom, pré-compilado em funções de renderização JavaScript e anexado ao componente exportado como sua opçãorender.
# <script>
 Cada arquivo
*.vuepode conter no máximo um bloco<script>por vez (excluindo<script setup>).O script é executado como um Módulo ES.
A exportação padrão deve ser um objeto de opções do componente Vue, como um objeto simples ou como o valor de retorno de defineComponent.
# <script setup>
 Cada arquivo
*.vuepode conter no máximo um bloco<script setup>por vez (excluindo o<script>normal).O script é pré-processado e usado como a função
setup()do componente, o que significa que será executado para cada instância do componente. Os vínculos de nível superior em<script setup>são automaticamente expostos ao template. Para mais detalhes, veja documentação dedicada ao<script setup>.
# <style>
 Um único arquivo
*.vuepode conter várias tags<style>.Uma tag
<style>pode ter atributosscopedoumodule(veja Recursos de Estilo em SFC para mais detalhes) para ajudar a encapsular os estilos no componente atual. Várias tags<style>com diferentes modos de encapsulamento podem ser misturadas no mesmo componente.
# Blocos Customizados
Blocos customizados adicionais podem ser incluídos em um arquivo *.vue para qualquer necessidade específica do projeto, por exemplo, um bloco <docs>. Alguns exemplos do mundo real de blocos customizados incluem:
- Gridsome: 
<page-query>(opens new window) - vite-plugin-vue-gql: 
<gql>(opens new window) - vue-i18n: 
<i18n>(opens new window) 
O manuseio de Blocos Customizados dependerá das ferramentas - se você quiser criar suas próprias integrações de blocos customizados, consulte Ferramentas para SFC para obter mais detalhes.
# Inferência Automática de nome
 Um SFC infere automaticamente o nome do componente pelo seu nome do arquivo nos seguintes casos:
- Formatação de aviso do desenvolvedor
 - Inspeção no DevTools
 - Auto-referência recursiva. Por exemplo. um arquivo chamado 
FooBar.vuepode se referir a si mesmo como<FooBar/>em seu template. Isso tem prioridade menor do que componentes explicitamente registrados/importados. 
# Pré-Processadores
Os blocos podem declarar linguagens de pré-processador usando o atributo lang. O caso mais comum é usar TypeScript para o bloco <script>:
<script lang="ts">
  // usa TypeScript
</script>
 2
3
lang pode ser aplicado a qualquer bloco - por exemplo, podemos usar <style> com SASS (opens new window) e <template> com Pug (opens new window):
<template lang="pug">
p {{ msg }}
</template>
<style lang="scss">
  $primary-color: #333;
  body {
    color: $primary-color;
  }
</style>
 2
3
4
5
6
7
8
9
10
Observe que a integração com pré-processadores pode diferir com base na cadeia de ferramentas. Confira as respectivas documentações para exemplos:
# Importações Src
Se preferir dividir seus componentes *.vue em vários arquivos, você pode usar o atributo src para importar um arquivo externo para um bloco de languagem:
<template src="./template.html"></template>
<style src="./style.css"></style>
<script src="./script.js"></script>
 2
3
Esteja ciente de que as importações src seguem as mesmas regras de resolução de caminho que as solicitações do módulo webpack, o que significa:
- Caminhos relativos precisam começar com 
./ - Você pode importar recursos das dependências npm:
 
<!-- importar um arquivo do pacote npm "todomvc-app-css" instalado -->
<style src="todomvc-app-css/index.css">
 2
Importações src também funcionam com blocos customizados, por exemplo:
<unit-test src="./unit-test.js">
</unit-test>
 2
# Comentários
Dentro de cada bloco deve-se utilizar a sintaxe de comentários da linguagem utilizada (HTML, CSS, JavaScript, Pug, etc.). Para comentários de nível superior, use a sintaxe de comentário HTML: <!-- comente o conteúdo aqui -->