Regras de Vapor
Cada regra desta categoria reúne nesta página sua finalidade, configuração e exemplos incorreto e correto completos. Os exemplos de projeto também incluem os arquivos compartilhados, que devem ser usados nos dois casos. As linhas destacadas mostram a alteração; o código copiado preserva o conteúdo completo. As notas de suporte distinguem os diagnósticos disponíveis das convenções ilustrativas e dos contratos sem produtor atual; ativar um ID não implementa uma verificação ausente.
| Regra | Exemplos | Finalidade |
|---|---|---|
script/no-get-current-instance |
Incorreto · Correto | Proibir getCurrentInstance() no modo Vapor (retorna null) |
script/no-next-tick |
Incorreto · Correto | Proibir o uso de nextTick() em componentes orientados a Vapor |
script/no-options-api |
Incorreto · Correto | Proibir padrões da Options API no modo Vapor |
vapor/no-inline-template |
Incorreto · Correto | Proibir o atributo obsoleto inline-template |
vapor/no-vue-lifecycle-events |
Incorreto · Correto | Proibir eventos de ciclo de vida @vue:xxx por elemento (não suportados em Vapor) |
vapor/prefer-static-class |
Incorreto · Correto | Preferir class estática a uma vinculação dinâmica de class para literais de string |
vapor/require-vapor-attribute |
Incorreto · Correto | Sugerir a adição do atributo vapor a script setup |
Todas as regras · Opções das regras · Mapa de migração do ESLint · Verificações do projeto · Atributos entre componentes
script/no-get-current-instance
Proibir getCurrentInstance() no modo Vapor (retorna null)
Severidade padrão: error
Predefinições: opinionated
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Verificações de script voltadas ao Vapor; a ativação explícita também aplica a restrição a scripts comuns
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Configuração (Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"script/no-get-current-instance": "error"
}
},
},
});
vp run lint
Incorreto
O setup marcado como Vapor importa e chama getCurrentInstance, dependendo de uma API de instância que esta regra proíbe para componentes orientados a Vapor.
<script setup lang="ts" vapor>
import { getCurrentInstance } from "vue";
const instance = getCurrentInstance();
</script>
Correto
inject("app-config") obtém a configuração fornecida explicitamente sem importar nem chamar getCurrentInstance.
<script setup lang="ts" vapor>
import { inject } from "vue";
const appConfig = inject("app-config");
</script>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.
Implementação · Todas as regras
script/no-next-tick
Proibir o uso de nextTick() em componentes orientados a Vapor
Severidade padrão: error
Predefinições: none
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Verificações de script voltadas ao Vapor; a ativação explícita também aplica a restrição a scripts comuns
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Configuração (Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"script/no-next-tick": "error"
}
},
},
});
vp run lint
Incorreto
O componente orientado a Vapor importa e aguarda nextTick, introduzindo a dependência do agendamento da atualização do DOM que esta regra de migração rejeita.
<script setup lang="ts" vapor>
import { nextTick } from "vue";
await nextTick();
</script>
Correto
O input é obtido por useTemplateRef e recebe foco em onMounted. O momento explícito de montagem substitui a dependência de nextTick do exemplo.
<script setup lang="ts" vapor>
import { onMounted, useTemplateRef } from "vue";
const input = useTemplateRef<HTMLInputElement>("input");
onMounted(() => { input.value?.focus(); });
</script>
<template><input ref="input"></template>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.
Implementação · Todas as regras
script/no-options-api
Proibir padrões da Options API no modo Vapor
Severidade padrão: error
Predefinições: opinionated
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Verificações de script voltadas ao Vapor; a ativação explícita também aplica a restrição a scripts comuns
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Configuração (Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"script/no-options-api": "error"
}
},
},
});
vp run lint
Incorreto
O objeto da exportação padrão declara data() da Options API, uma forma de opção de componente proibida por esta regra.
<script lang="ts">
export default {
data() {
return { count: 0 };
},
};
</script>
Correto
O estado do componente passa a ser um ref da Composition API em <script setup> com Vapor, removendo o objeto da Options API e sua opção data.
<script setup lang="ts" vapor>
const count = ref(0);
</script>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.
Implementação · Todas as regras
vapor/no-inline-template
Proibir o atributo obsoleto inline-template
Severidade padrão: error
Predefinições: nuxt, opinionated
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Templates e blocos de SFC Vue, com o contexto do script quando exigido pela regra
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Configuração (Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"vapor/no-inline-template": "error"
}
},
},
});
vp run lint
Incorreto
LegacyCard usa o atributo inline-template para a marcação de seu conteúdo filho.
<template>
<LegacyCard inline-template>
<p>Profile</p>
</LegacyCard>
</template>
Correto
A marcação é passada pelo slot padrão em vez de um template inline.
<template>
<LegacyCard>
<template #default>
<p>Profile</p>
</template>
</LegacyCard>
</template>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.
Implementação · Todas as regras
vapor/no-vue-lifecycle-events
Proibir eventos de ciclo de vida @vue:xxx por elemento (não suportados em Vapor)
Severidade padrão: error
Predefinições: happy-path, nuxt, ecosystem, opinionated
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Templates e blocos de SFC Vue, com o contexto do script quando exigido pela regra
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Configuração (Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"vapor/no-vue-lifecycle-events": "error"
}
},
},
});
vp run lint
Incorreto
O input usa o evento de ciclo de vida de template @vue:mounted.
<template>
<input @vue:mounted="focusInput" />
</template>
Correto
onMounted acessa a referência nomeada de template e coloca o foco no input por meio do hook de ciclo de vida de script suportado.
<script setup lang="ts" vapor>
const input = useTemplateRef<HTMLInputElement>("input");
onMounted(() => {
input.value?.focus();
});
</script>
<template>
<input ref="input" />
</template>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.
Implementação · Todas as regras
vapor/prefer-static-class
Preferir class estática a uma vinculação dinâmica de class para literais de string
Severidade padrão: warning
Predefinições: nuxt, opinionated
Correção automática: Disponível para os diagnósticos compatíveis
Aplicável a: Templates e blocos de SFC Vue, com o contexto do script quando exigido pela regra
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Configuração (Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"vapor/prefer-static-class": "warn"
}
},
},
});
vp run lint
Incorreto
A vinculação de class avalia uma string constante, embora a classe não mude.
<template>
<section :class="'panel panel-primary'">Profile</section>
</template>
Correto
Um atributo class estático expressa as mesmas classes do painel sem uma vinculação.
<template>
<section class="panel panel-primary">Profile</section>
</template>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.
Implementação · Todas as regras
vapor/require-vapor-attribute
Sugerir a adição do atributo vapor a script setup
Severidade padrão: warning
Predefinições: nuxt, opinionated
Correção automática: Não implementada no lint de SFC
Aplicável a: Templates e blocos de SFC Vue, com o contexto do script quando exigido pela regra
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Suporte atual: no-sfc-finding
Esta regra é um marcador provisório com callback vazio. Adicionar vapor seleciona a compilação Vapor; o linter atual não reporta este ID do catálogo pela ausência desse atributo.
ID configurado (sem diagnóstico de SFC atualmente)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"vapor/require-vapor-attribute": "warn"
}
},
},
});
vp run lint
Incorreto
O bloco script setup não tem o atributo de compilação Vapor. Esta é uma convenção pretendida: a função de retorno atualmente vazia da regra não diagnostica sua ausência.
<script setup>
const count = 0;
</script>
<template><p>{{ count }}</p></template>
Correto
Adicionar vapor seleciona a compilação Vapor. Isso demonstra a correção pretendida e não implica que o linter atual emita esta regra do catálogo.
<script setup vapor>
const count = 0;
</script>
<template><p>{{ count }}</p></template>
O exemplo correto ilustra a convenção pretendida; o fluxo atual de SFC não emite o diagnóstico específico da regra para nenhum dos exemplos.