ESLint применяется в экосистеме Vue.js как основной инструмент статического анализа кода, обеспечивающий единообразие стиля, выявление ошибок на этапе разработки и контроль архитектурных ограничений. В Vue-проектах его роль усиливается из-за специфики шаблонов, реактивности и разделения логики на компоненты, что требует расширенного набора правил и специализированных плагинов.
Vue-приложения строятся вокруг компонентов, содержащих шаблон, скрипт и стили. ESLint в таком контексте выполняет несколько уровней анализа:
Классический линтер для JavaScript недостаточен, поэтому используется
расширение через плагины, главным из которых является
eslint-plugin-vue, обеспечивающий поддержку
.vue файлов.
Типовой Vue-проект инициализируется через Vite или Vue CLI, где ESLint подключается либо автоматически, либо вручную.
Основные зависимости:
Для TypeScript дополнительно:
Конфигурация может быть представлена в формате
.eslintrc.js:
module.exports = {
root: true,
env: {
browser: true,
node: true
},
extends: [
"eslint:recommended",
"plugin:vue/vue3-recommended"
],
parser: "vue-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser",
ecmaVersion: 2022,
sourceType: "module"
},
rules: {
"vue/multi-word-component-names": "off"
}
};
Ключевой момент — использование vue-eslint-parser,
который позволяет корректно разбирать .vue файлы, включая
<template> и <script> блоки.
Single File Components (SFC) требуют многоуровневого анализа:
vue-eslint-parser<script> применяется JS/TS парсер<template> используется отдельная логика
анализа Vue ASTЭто позволяет ESLint:
v-if,
v-for)eslint-plugin-vue предоставляет набор пресетов:
vue3-essential — минимальный набор критических
правилvue3-strongly-recommended — расширенные правила
качестваvue3-recommended — полный набор рекомендацийПример расширенной конфигурации:
extends: [
"eslint:recommended",
"plugin:vue/vue3-recommended"
]
Правила охватывают:
v-bind и
v-modelComposition API изменяет структуру логики компонентов, что влияет на правила линтинга.
Типичные проверки:
ref и
reactivewatchcomputedПример правила:
"vue/no-ref-as-operand": "error"
При работе с script setup анализ становится более
статическим, так как отсутствует классическая структура
export default.
В Vue 3 TypeScript используется широко, что требует интеграции:
parser: "vue-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser"
}
Ключевые правила:
anyESLint в связке с TypeScript позволяет выявлять ошибки, которые не обнаруживаются во время выполнения.
Vue-проекты часто требуют единообразия архитектуры компонентов.
ESLint может контролировать:
template, script,
style)Пример правил:
"vue/component-definition-name-casing": ["error", "PascalCase"],
"vue/order-in-components": "error"
Template-часть Vue требует отдельного набора правил:
v-forПример:
"vue/no-unused-vars": "error",
"vue/require-v-for-key": "error"
Сложные выражения в шаблоне ограничиваются для повышения читаемости:
<!-- нежелательно -->
<div>{{ items.filter(i => i.active).map(i => i.name) }}</div>
В современных проектах ESLint подключается через Vite-плагин:
Пример:
import eslint from "vite-plugin-eslint";
export default {
plugins: [eslint()]
};
ESLint выполняется при dev-сборке и может блокировать некорректный код до рендера приложения.
Vue CLI предоставляет встроенную поддержку ESLint:
В режиме разработки ошибки отображаются прямо в браузере через overlay.
В Vue-проектах часто используется связка ESLint + Prettier.
Основная проблема — пересечение правил форматирования:
Решение:
extends: [
"plugin:vue/vue3-recommended",
"prettier"
]
И использование:
Это отключает конфликтующие правила форматирования.
В крупных проектах вводятся дополнительные ограничения:
Пример:
"no-restricted-imports": [
"error",
{
paths: [
{
name: "@/store",
message: "Use composables instead"
}
]
}
]
В монорепозиториях Vue-приложений ESLint применяется на нескольких уровнях:
Пример структуры:
/packages
/app-vue
/ui-kit
/shared
.eslintrc.js
Важно:
.vue и
.tsESLint позволяет задавать разные правила:
overrides: [
{
files: ["*.vue"],
rules: {
"vue/multi-word-component-names": "off"
}
},
{
files: ["*.ts"],
rules: {
"@typescript-eslint/no-explicit-any": "error"
}
}
]
Это критично для Vue-проектов, где шаблоны и логика имеют разные требования.
ESLint выявляет частые проблемы Vue-разработки:
ref.valueПример анти-паттерна:
const { count } = reactive(state);
count++;
Такой код ломает реактивную связь, и линтер может предупреждать об этом через специфические правила.
ESLint в Vue-проектах часто включается в pipeline:
eslint .Пример команды:
eslint "src/**/*.{js,ts,vue}"
В CI используется:
При больших Vue-проектах важны оптимизации:
--cache)node_modulesПример:
eslint . --cache --max-warnings=0
С переходом на Vue 3 изменились ключевые правила:
filtersscript setupESLint-конфигурации адаптировались через новые пресеты
vue3-*, отражающие современную архитектуру фреймворка.