Regras do Ecossistema
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 |
|---|---|---|
ecosystem/nuxt-prefer-nuxt-link |
Incorreto · Correto | Preferir NuxtLink para links internos da aplicação |
ecosystem/pinia-prefer-store-to-refs |
Incorreto · Correto | Preferir storeToRefs() ao desestruturar stores do Pinia |
ecosystem/router-link-require-to |
Incorreto · Correto | Exigir um destino to nos componentes RouterLink e NuxtLink |
ecosystem/void-link-require-href |
Incorreto · Correto | Exigir href nos componentes Link do Void Vue |
ecosystem/void-link-valid-method |
Incorreto · Correto | Validar props method estáticas do Link do Void Vue |
ecosystem/vue-i18n-no-missing-key |
Incorreto · Correto | Relatar chaves estáticas do vue-i18n ausentes nas mensagens locais do SFC |
ecosystem/vue-router-prefer-named-link |
Incorreto · Correto | Preferir objetos de rotas nomeadas a strings de caminho estáticas no RouterLink |
ecosystem/vue-router-prefer-named-push |
Incorreto · Correto | Preferir objetos de rotas nomeadas para navegação programática com Vue Router |
ecosystem/vue-test-utils-no-html-snapshot |
Incorreto · Correto | Evitar snapshots de wrapper.html() nos testes com Vue Test Utils |
nuxt/no-nuxt-config-test-key |
Incorreto · Correto | Proibir a definição da chave test na configuração do Nuxt |
nuxt/no-page-meta-runtime-values |
Incorreto · Correto | Proibir valores do contexto de execução no nível de avaliação imediata de definePageMeta, que é extraído para um fragmento separado durante a compilação e executado antes do setup do componente |
nuxt/nuxt-config-keys-order |
Incorreto · Correto | Preferir a ordem recomendada das propriedades de configuração do Nuxt |
nuxt/prefer-import-meta |
Incorreto · Correto | Preferir import.meta.* a process.* |
Todas as regras · Opções das regras · Mapa de migração do ESLint · Verificações do projeto · Atributos entre componentes
ecosystem/nuxt-prefer-nuxt-link
Preferir NuxtLink para links internos da aplicação
Severidade padrão: warning
Predefinições: nuxt
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": {
"ecosystem/nuxt-prefer-nuxt-link": "warn"
}
},
},
});
vp run lint
Incorreto
O destino interno de configurações usa uma âncora comum em uma aplicação Nuxt.
<template>
<a href="/settings">Settings</a>
</template>
Correto
NuxtLink trata o mesmo destino interno por meio do roteador do Nuxt.
<template>
<NuxtLink to="/settings">Settings</NuxtLink>
</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
ecosystem/pinia-prefer-store-to-refs
Preferir storeToRefs() ao desestruturar stores do Pinia
Severidade padrão: warning
Predefinições: ecosystem
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Scripts JS/TS em SFCs Vue; os exemplos mostram a forma relevante de Options API ou script setup
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": {
"ecosystem/pinia-prefer-store-to-refs": "warn"
}
},
},
});
vp run lint
Incorreto
Desestruturar name diretamente do store separa o valor de seu acesso reativo ao store.
<script setup lang="ts">
const { name } = useUserStore();
</script>
Correto
O store permanece intacto e storeToRefs cria uma referência reativa para name.
<script setup lang="ts">
const store = useUserStore();
const { name } = storeToRefs(store);
</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
ecosystem/router-link-require-to
Exigir um destino to nos componentes RouterLink e NuxtLink
Severidade padrão: error
Predefinições: ecosystem
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.
Um link que seja a única raiz de um SFC pode herdar seu target dos atributos do pai. Este exemplo usa um link aninhado, cujo target deve ser explícito.
Configuração (Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"ecosystem/router-link-require-to": "error"
}
},
},
});
vp run lint
Incorreto
O RouterLink aninhado não tem um destino to; ele não pode depender da propagação de atributos do elemento raiz.
<template>
<nav><RouterLink>Settings</RouterLink></nav>
</template>
Correto
to="/settings" fornece explicitamente o destino do link aninhado.
<template>
<nav><RouterLink to="/settings">Settings</RouterLink></nav>
</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
ecosystem/void-link-require-href
Exigir href nos componentes Link do Void Vue
Severidade padrão: error
Predefinições: ecosystem
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": {
"ecosystem/void-link-require-href": "error"
}
},
},
});
vp run lint
Incorreto
O Link importado de @void/vue omite seu destino href.
<script setup>
import { Link } from "@void/vue";
</script>
<template>
<Link>Settings</Link>
</template>
Correto
O mesmo Link importado recebe o destino de configurações por meio de href.
<script setup>
import { Link } from "@void/vue";
</script>
<template>
<Link href="/settings">Settings</Link>
</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
ecosystem/void-link-valid-method
Validar props method estáticas do Link do Void Vue
Severidade padrão: warning
Predefinições: ecosystem
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": {
"ecosystem/void-link-valid-method": "warn"
}
},
},
});
vp run lint
Incorreto
A ação DELETE solicita pré-busca, embora a pré-busca seja destinada a solicitações de navegação.
<script setup>
import { Link } from "@void/vue";
</script>
<template>
<Link href="/posts/1" method="DELETE" prefetch>Delete</Link>
</template>
Correto
Remover prefetch mantém a ação DELETE sem fazer a pré-busca dessa solicitação que não é GET.
<script setup>
import { Link } from "@void/vue";
</script>
<template>
<Link href="/posts/1" method="DELETE">Delete</Link>
</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
ecosystem/vue-i18n-no-missing-key
Relatar chaves estáticas do vue-i18n ausentes nas mensagens locais do SFC
Severidade padrão: warning
Predefinições: ecosystem
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": {
"ecosystem/vue-i18n-no-missing-key": "warn"
}
},
},
});
vp run lint
Incorreto
O template solicita auth.missing, mas as mensagens locais em inglês declaram apenas auth.login.
<template>{{ $t("auth.missing") }}</template>
<i18n lang="json">
{ "en": { "auth": { "login": "Log in" } } }
</i18n>
Correto
O template solicita a chave auth.login, que existe nas mensagens locais.
<template>{{ $t("auth.login") }}</template>
<i18n lang="json">
{ "en": { "auth": { "login": "Log in" } } }
</i18n>
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
ecosystem/vue-router-prefer-named-link
Preferir objetos de rotas nomeadas a strings de caminho estáticas no RouterLink
Severidade padrão: warning
Predefinições: ecosystem
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": {
"ecosystem/vue-router-prefer-named-link": "warn"
}
},
},
});
vp run lint
Incorreto
O destino do RouterLink é um caminho literal, em vez de uma rota nomeada.
<template>
<RouterLink to="/settings">Settings</RouterLink>
</template>
Correto
O objeto de rota vinculado identifica o destino pelo nome de rota settings.
<template>
<RouterLink :to="{ name: 'settings' }">Settings</RouterLink>
</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
ecosystem/vue-router-prefer-named-push
Preferir objetos de rotas nomeadas para navegação programática com Vue Router
Severidade padrão: warning
Predefinições: ecosystem
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Scripts JS/TS em SFCs Vue; os exemplos mostram a forma relevante de Options API ou script setup
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": {
"ecosystem/vue-router-prefer-named-push": "warn"
}
},
},
});
vp run lint
Incorreto
router.push recebe uma string de caminho vinculada à grafia atual da URL.
<script setup lang="ts">
router.push("/settings");
</script>
Correto
router.push recebe um objeto de rota com o nome estável settings.
<script setup lang="ts">
router.push({ name: "settings" });
</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
ecosystem/vue-test-utils-no-html-snapshot
Evitar snapshots de wrapper.html() nos testes com Vue Test Utils
Severidade padrão: warning
Predefinições: ecosystem
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Scripts JS/TS em SFCs Vue; os exemplos mostram a forma relevante de Options API ou script setup
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": {
"ecosystem/vue-test-utils-no-html-snapshot": "warn"
}
},
},
});
vp run lint
Incorreto
A asserção registra um snapshot de todo o HTML do wrapper, em vez de verificar o comportamento esperado.
<script setup lang="ts">
expect(wrapper.html()).toMatchSnapshot();
</script>
Correto
A asserção verifica se o texto renderizado contém Saved.
<script setup lang="ts">
expect(wrapper.text()).toContain("Saved");
</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
nuxt/no-nuxt-config-test-key
Proibir a definição da chave test na configuração do Nuxt
Severidade padrão: error
Predefinições: nuxt
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Arquivos de configuração do Nuxt (nuxt.config.ts)
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": {
"nuxt/no-nuxt-config-test-key": "error"
}
},
},
});
vp run lint
Incorreto
A configuração exportada do Nuxt define a chave identificadora test como o booleano true, a estrutura de configuração obsoleta que esta regra rejeita.
nuxt.config.ts
export default defineNuxtConfig({ test: true });
Correto
A configuração vazia remove essa propriedade booleana test. Este exemplo não proíbe um objeto de configuração de testes.
nuxt.config.ts
export default defineNuxtConfig({});
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
nuxt/no-page-meta-runtime-values
Proibir valores do contexto de execução no nível de avaliação imediata de definePageMeta, que é extraído para um fragmento separado durante a compilação e executado antes do setup do componente
Severidade padrão: error
Predefinições: nuxt
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Scripts JS/TS em SFCs Vue; os exemplos mostram a forma relevante de Options API ou script setup
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": {
"nuxt/no-page-meta-runtime-values": "error"
}
},
},
});
vp run lint
Incorreto
useRoute() é avaliado imediatamente durante a construção do objeto definePageMeta, embora a macro eleve esses metadados para fora do contexto de execução de setup.
<script setup lang="ts">
definePageMeta({ title: useRoute() });
</script>
Correto
validate recebe uma função de callback, então o acesso a useRoute().params.id é adiado até a execução dessa função. A regra distingue corpos de funções com execução adiada de valores de metadados avaliados imediatamente.
<script setup lang="ts">
definePageMeta({ validate: () => Boolean(useRoute().params.id) });
</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
nuxt/nuxt-config-keys-order
Preferir a ordem recomendada das propriedades de configuração do Nuxt
Severidade padrão: error
Predefinições: nuxt
Correção automática: Disponível para os diagnósticos compatíveis
Aplicável a: Arquivos de configuração do Nuxt (nuxt.config.ts)
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": {
"nuxt/nuxt-config-keys-order": "error"
}
},
},
});
vp run lint
Incorreto
A configuração coloca ssr antes de modules, invertendo sua ordem na sequência de chaves de configuração do Nuxt recomendada pela regra.
nuxt.config.ts
export default defineNuxtConfig({ ssr: true, modules: [] });
Correto
Colocar modules antes de ssr preserva os dois valores e atende à ordem prescrita; a correção muda a disposição, sem alterar o significado de nenhuma das opções.
nuxt.config.ts
export default defineNuxtConfig({ modules: [], ssr: true });
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
nuxt/prefer-import-meta
Preferir import.meta.* a process.*
Severidade padrão: error
Predefinições: nuxt
Correção automática: Disponível para os diagnósticos compatíveis
Aplicável a: Scripts JS/TS em SFCs Vue; os exemplos mostram a forma relevante de Options API ou script setup
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": {
"nuxt/prefer-import-meta": "error"
}
},
},
});
vp run lint
Incorreto
process.client usa um indicador de ambiente legado do Nuxt que a regra pede para migrar para import.meta.
<script setup lang="ts">
if (process.client) console.log("browser");
</script>
Correto
import.meta.client mantém explícito o ramo exclusivo do navegador usando o indicador de ambiente substituto.
<script setup lang="ts">
if (import.meta.client) console.log("browser");
</script>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.