При работе с ESLint значительная часть затруднений связана не с самим линтером, а с его взаимодействием с редактором кода. Ошибки конфигурации, различия между версиями расширений, особенности монорепозиториев и некорректные настройки рабочих областей часто приводят к ситуациям, когда ESLint работает в терминале, но не отображает ошибки в редакторе, либо наоборот.
Понимание наиболее распространённых проблем позволяет быстро находить причину неисправности и восстанавливать корректную работу инструментов анализа кода.
Одна из самых распространённых ситуаций — выполнение команды ESLint в терминале успешно обнаруживает нарушения, однако редактор не отображает предупреждения и ошибки.
Расширение ESLint не установлено
Во многих редакторах поддержка ESLint реализуется отдельным расширением.
Например, в Visual Studio Code требуется установка официального расширения ESLint.
Проверка:
npx eslint src/index.js
Если команда выводит ошибки, а редактор ничего не показывает, необходимо проверить состояние расширения.
Расширение отключено
После обновлений редактора или изменения рабочей области расширение может оказаться отключённым.
Необходимо убедиться, что:
Открыта не та директория проекта
ESLint ищет конфигурационные файлы относительно открытой папки.
Проблема часто возникает при следующей структуре:
workspace/
├── frontend/
│ ├── eslint.config.js
│ └── src/
└── backend/
Если открыт каталог:
workspace/
а конфигурация находится в:
workspace/frontend/
редактор может не обнаружить настройки ESLint.
Файл исключён из анализа
Проверяется наличие:
.eslintignore
или параметров:
ignores: [
"dist/**",
"build/**"
]
в конфигурации Flat Config.
Если файл соответствует одному из шаблонов игнорирования, диагностика отображаться не будет.
Подобная ситуация обычно связана с различиями между окружением редактора и терминала.
В VS Code полезно открыть:
View → Output → ESLint
Журнал часто содержит сообщения вида:
Failed to load ESLint library
или:
No ESLint configuration found
Именно эти сообщения позволяют быстро определить источник проблемы.
Редактор может запускаться с одной версией Node.js, а терминал — с другой.
Например:
node -v
в терминале показывает:
v22.0.0
а расширение использует системную версию:
v16.0.0
В результате часть пакетов может не загружаться.
Особенно часто проблема возникает при использовании:
Нежелательно полагаться исключительно на глобальную установку:
npm install -g eslint
Предпочтительным считается локальное размещение:
npm install --save-dev eslint
Расширения редакторов обычно ищут ESLint внутри проекта.
Распространённая ошибка:
Failed to load plugin
или:
Cannot find module eslint-plugin-react
Плагин указан в конфигурации:
plugins: {
react
}
но отсутствует в зависимостях:
npm install --save-dev eslint-plugin-react
Иногда после обновлений возникает конфликт пакетов.
Помогает полная переустановка:
rm -rf node_modules
rm package-lock.json
npm install
Для Yarn:
rm -rf node_modules
rm yarn.lock
yarn install
Например:
eslint@9
eslint-plugin-react@старой версии
Некоторые плагины могут не поддерживать новую архитектуру ESLint.
Следует проверить совместимость версий используемых пакетов.
Сообщение:
No ESLint configuration found
означает, что ESLint не смог обнаружить конфигурацию.
Для современных версий ESLint рекомендуется наличие файла:
eslint.config.js
или:
eslint.config.mjs
Пример:
import js from "@eslint/js";
export default [
js.configs.recommended
];
Конфигурация должна находиться в корне проекта:
project/
├── eslint.config.js
├── package.json
└── src/
Если файл помещён внутрь:
config/eslint.config.js
ESLint может не найти его автоматически.
Иногда редактор постоянно изменяет файл после сохранения.
Например:
Возникает цикл исправлений.
После сохранения:
const value = "test"
мгновенно превращается в:
const value = "test";
затем снова изменяется.
Использование пакета:
npm install --save-dev eslint-config-prettier
Конфигурация:
import eslintConfigPrettier from "eslint-config-prettier";
export default [
eslintConfigPrettier
];
Он отключает правила ESLint, конфликтующие с Prettier.
Следует убедиться, что одновременно не работают несколько механизмов форматирования:
{
"editor.formatOnSave": true
}
и
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
Неправильная комбинация настроек способна вызвать постоянные изменения файла.
Команда:
npx eslint src --fix
успешно исправляет код, однако редактор этого не делает.
Не включён запуск исправлений при сохранении.
Для VS Code обычно используется настройка:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
Не каждое правило имеет механизм autofix.
Например:
if (foo == bar)
Некоторые правила могут лишь сообщить о проблеме:
eqeqeq
но не исправить её автоматически.
При отсутствии прав на запись исправления не применяются.
Симптомы:
Частая ошибка:
Parsing error
или:
Unexpected token interface
Необходимы пакеты:
npm install --save-dev \
typescript \
typescript-eslint
Пример конфигурации:
import tseslint from "typescript-eslint";
export default [
...tseslint.configs.recommended
];
Некоторые правила требуют доступа к информации о типах.
При отсутствии файла:
tsconfig.json
редактор может выводить ошибки анализа.
Минимальный пример:
{
"compilerOptions": {
"strict": true
}
}
В крупных проектах встречается структура:
tsconfig.json
tsconfig.app.json
tsconfig.test.json
Редактор может выбрать неверный файл конфигурации.
В таких случаях требуется явно указывать настройки проекта в конфигурации ESLint.
Структура:
repo/
├── packages/
│ ├── app/
│ └── ui/
└── eslint.config.js
создаёт дополнительные сложности.
Причина может заключаться в шаблонах:
files: [
"src/**/*.js"
]
которые не охватывают остальные пакеты.
Следует использовать более широкие шаблоны:
files: [
"packages/*/src/**/*.js"
]
Если открыт каталог:
packages/app
а конфигурация находится в:
repo/eslint.config.js
редактор может не подняться до корня репозитория.
В подобных случаях открывают корневую директорию репозитория либо настраивают рабочую область соответствующим образом.
Иногда одна и та же проблема отображается несколько раз.
Пример:
ESLint
TypeScript
Language Server
одновременно сообщают о нарушении.
Параллельно работают:
Для Jav * aScript:
{
"javascript.validate.enable": false
}
Для TypeScript:
{
"typescript.validate.enable": false
}
После этого диагностика остаётся только у ESLint.
В больших проектах ESLint способен заметно замедлять работу среды разработки.
Нежелательно проверять:
node_modules/
dist/
coverage/
build/
Пример игнорирования:
ignores: [
"node_modules/**",
"dist/**",
"coverage/**"
]
Наибольшую нагрузку обычно создают:
В крупных проектах часть ресурсоёмких правил нередко запускается только в CI.
Каждый открытый файл может инициировать отдельный процесс проверки.
Симптомы:
Уменьшение количества открытых вкладок и оптимизация конфигурации обычно существенно улучшают производительность.
При возникновении сложных проблем полезно выполнять диагностику поэтапно.
npx eslint --version
npx eslint --print-config src/index.js
Команда показывает итоговую конфигурацию после объединения всех правил и плагинов.
npx eslint src/index.js
Необходимо убедиться в наличии:
При отсутствии работы ESLint в редакторе последовательно проверяются следующие пункты:
eslint.config.js.Систематическая проверка этих пунктов позволяет устранить подавляющее большинство проблем интеграции ESLint с современными редакторами кода.