eslint-plugin-vue - офіційний плагін ESLint, що розбирає .vue-файли, включно з шаблонами. Для TypeScript у Vue-файлах поруч ставлять @vue/eslint-config-typescript (обгортка над typescript-eslint, що знає про SFC). create-vue налаштовує все це сам.
Плоска конфігурація (ESLint 9+):
// eslint.config.js
import pluginVue from 'eslint-plugin-vue'
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
export default defineConfigWithVueTs(
pluginVue.configs['flat/recommended'],
vueTsConfigs.recommended,
{
rules: {
'vue/multi-word-component-names': 'off',
},
},
)
Рівні наборів правил: flat/essential (помилки), flat/strongly-recommended (+ читабельність), flat/recommended (+ узгодженість стилю).
Правила, що ловлять справжні баги:
vue/no-mutating-props- зміна props у дочірньому компоненті;vue/require-v-for-keyіvue/valid-v-for-v-forбез ключа;vue/no-use-v-if-with-v-for-v-ifіv-forна одному елементі (пріоритетv-ifвищий, і змінна циклу в ньому недоступна);vue/no-side-effects-in-computed-properties- зміна стану вcomputed;vue/no-ref-as-operand-count + 1замістьcount.value + 1;vue/no-setup-props-reactivity-loss- деструктуризація props зі втратою реактивності;vue/no-v-html- потенційний XSS;vue/require-explicit-emits- неоголошені події.
З TypeScript-правилами на основі типів (vueTsConfigs.recommendedTypeChecked) додаються, наприклад, @typescript-eslint/no-floating-promises - необроблені Promise в обробниках. Вони повільніші, бо будують програму TypeScript.
Розділення відповідальності:
- форматування - Prettier, а правила стилю ESLint, що з ним конфліктують, вимикаються (
@vue/eslint-config-prettier); - типи -
vue-tsc, а не ESLint; - ESLint - помилки логіки й небезпечні шаблони.
У CI лінтер запускають з --max-warnings 0 - інакше попередження накопичуються й перестають щось означати.