Vite-проекты обычно используют современный стек JavaScript/TypeScript и требуют строгой проверки качества кода на уровне линтера. ESLint выступает центральным инструментом статического анализа, позволяющим выявлять ошибки, поддерживать единый стиль и предотвращать потенциальные баги ещё до запуска приложения.
Базовая установка начинается с добавления самого ESLint и сопутствующих зависимостей:
npm install eslint -D
или при использовании pnpm:
pnpm add eslint -D
После установки выполняется инициализация конфигурации:
npx eslint --init
Современные версии ESLint предлагают выбор между классической конфигурацией и flat config. В экосистеме Vite предпочтение постепенно смещается к flat config из-за его предсказуемости и лучшей масштабируемости.
Flat config устраняет сложную систему наследования
.eslintrc и заменяет её единым JavaScript-конфигом.
Пример базовой конфигурации eslint.config.js:
import js from "@eslint/js";
export default [
js.configs.recommended,
{
files: ["**/*.{js,ts}"],
languageOptions: {
ecmaVersion: "latest",
sourceType: "module",
},
rules: {
"no-unused-vars": "warn",
"no-console": "off"
}
}
];
Для TypeScript требуется подключение парсера и плагина:
npm install -D typescript-eslint
Расширенная конфигурация:
import js from "@eslint/js";
import tseslint from "typescript-eslint";
export default [
js.configs.recommended,
...tseslint.configs.recommended,
{
files: ["**/*.ts"],
languageOptions: {
parserOptions: {
project: "./tsconfig.json"
}
},
rules: {
"@typescript-eslint/no-unused-vars": "warn"
}
}
];
Vite не выполняет ESLint проверку по умолчанию, так как его задача —
быстрый бандлинг и HMR. Для интеграции используется плагин
vite-plugin-eslint.
Установка:
npm install vite-plugin-eslint -D
Подключение в vite.config.js:
import { defineConfig } from "vite";
import eslint from "vite-plugin-eslint";
export default defineConfig({
plugins: [
eslint({
cache: false,
include: ["src/**/*.js", "src/**/*.ts", "src/**/*.vue"]
})
]
});
Этот плагин выполняет проверку кода во время разработки и выводит ошибки прямо в консоль Vite-сервера, а также в браузерный overlay.
При использовании TypeScript важно разделять задачи:
Конфигурация часто включает @typescript-eslint:
npm install -D @typescript-eslint/parser @typescript-eslint/eslint-plugin
Фрагмент настройки:
export default [
{
files: ["**/*.ts"],
languageOptions: {
parser: require("@typescript-eslint/parser"),
},
plugins: {
"@typescript-eslint": require("@typescript-eslint/eslint-plugin"),
},
rules: {
"@typescript-eslint/explicit-function-return-type": "warn",
"@typescript-eslint/no-explicit-any": "error"
}
}
];
При использовании Vite с React добавляется поддержка JSX и React Hooks правил:
npm install -D eslint-plugin-react eslint-plugin-react-hooks
Конфигурация:
export default [
{
files: ["**/*.jsx", "**/*.tsx"],
plugins: {
react: require("eslint-plugin-react"),
"react-hooks": require("eslint-plugin-react-hooks")
},
rules: {
"react/react-in-jsx-scope": "off",
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn"
}
}
];
Дополнительно часто подключается:
npm install -D eslint-plugin-react-refresh
для корректной работы Fast Refresh в Vite.
Vite является основным инструментом для Vue 3, поэтому ESLint здесь особенно важен.
Установка:
npm install -D eslint-plugin-vue vue-eslint-parser
Конфигурация:
export default [
{
files: ["**/*.vue"],
languageOptions: {
parser: require("vue-eslint-parser")
},
rules: {
"vue/multi-word-component-names": "off",
"vue/no-unused-vars": "warn"
}
}
];
ESLint в Vite-проектах должен исключать тяжёлые директории:
node_modules
dist
.vite
coverage
Для flat config:
export default [
{
ignores: ["dist", "node_modules", "coverage"]
}
];
Использование кеширования ускоряет повторные проверки:
eslint . --cache
Типовой набор скриптов:
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}
В Vite-проектах это становится стандартным этапом перед сборкой или коммитом.
Для предотвращения попадания невалидного кода в репозиторий применяется связка Husky + lint-staged.
Установка:
npm install -D husky lint-staged
Инициализация Husky:
npx husky init
Конфигурация package.json:
{
"lint-staged": {
"*.{js,ts,vue}": "eslint --fix"
}
}
Hook .husky/pre-commit:
npx lint-staged
В Vite-проектах часто возникает конфликт между форматированием ESLint и Prettier. Решение — разделение ответственности:
Установка:
npm install -D prettier eslint-config-prettier
Добавление в конфигурацию:
import prettier from "eslint-config-prettier";
export default [
prettier
];
Prettier отключает конфликтующие правила ESLint, оставляя форматирование отдельному инструменту.
ESLint не блокирует сборку Vite по умолчанию. Для строгих проектов добавляется отдельный шаг:
eslint . && vite build
или через CI pipeline.
В более строгих конфигурациях ESLint интегрируется в pipeline GitHub Actions:
- name: Lint
run: npm run lint
Часто встречающиеся ошибки конфигурации:
Отсутствие поддержки ESM в конфиге Vite использует ES modules, поэтому ESLint config должен быть совместимым.
Проблемы с parserOptions.project TypeScript может требовать корректного пути к tsconfig.
Дублирование правил между плагинами Особенно в связке Vue + TypeScript + ESLint.
Замедление dev-сервера Решается отключением синхронного lint в плагинах и использованием кеша.
Типовой набор правил для production-уровня:
rules: {
"no-unused-vars": "error",
"no-console": "warn",
"eqeqeq": "error",
"curly": "error",
"prefer-const": "error",
"no-var": "error"
}
Такая конфигурация формирует единый стиль кода и снижает количество логических ошибок.
ESLint в Vite-проектах выполняет роль не просто линтера, а элемента качества архитектуры:
В связке с Vite ESLint становится частью непрерывного цикла разработки, где проверка кода происходит параллельно с быстрым HMR и сборкой, не замедляя общий процесс разработки.