Одной из наиболее частых причин проблем с ESLint является смешивание
разных форматов конфигурации. В экосистеме существует два основных
подхода: legacy-конфигурация (.eslintrc.*) и flat config
(eslint.config.js).
Типичные ошибки:
.eslintrc и
eslint.config.jsПочему это ломает конфигурацию: ESLint может либо игнорировать один из файлов, либо объединять конфигурации непредсказуемым образом, что приводит к отсутствию правил или конфликтам.
extendsПоле extends часто используется неправильно, особенно
при подключении нескольких конфигураций.
Проблемные сценарии:
{
"extends": ["eslint:recommended", "plugin:react/recommended", "airbnb"]
}
Ошибки возникают, когда:
Ключевая причина: ESLint загружает конфигурации последовательно, и последующие значения могут перезаписывать предыдущие, включая правила и parserOptions.
Одна из самых «тихих» ошибок — отсутствие установленного плагина при его использовании в конфиге.
{
"plugins": ["react", "import"]
}
Но пакет не установлен:
npm ERR! Failed to load plugin 'react'
Причины:
eslint-plugin-*parserESLint по умолчанию использует встроенный парсер, но в современных
проектах часто требуется @babel/eslint-parser или
@typescript-eslint/parser.
Ошибка конфигурации:
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2020
}
}
Проблемы возникают, когда:
tsconfig.jsonproject в parserOptionsОсобенно критично для TypeScript:
{
"parserOptions": {
"project": "./tsconfig.json"
}
}
Без этого ESLint теряет типовую информацию и часть правил перестаёт работать.
parserOptionsНекорректные настройки ECMAScript среды часто приводят к ложным ошибкам синтаксиса.
Частые проблемы:
ecmaVersion ниже используемой версии JavaScriptsourceType: "module"{
"parserOptions": {
"ecmaVersion": 2015,
"sourceType": "script"
}
}
Последствия:
При использовании нескольких источников конфигурации часто возникает ситуация, когда правила «перетирают» друг друга.
Пример:
{
"rules": {
"no-console": "error"
},
"extends": ["eslint:recommended"]
}
И в другом конфиге:
{
"rules": {
"no-console": "off"
}
}
Причина: ESLint применяет последний загруженный источник конфигурации, и порядок становится критически важным.
envПоле env определяет глобальные переменные среды
выполнения.
{
"env": {
"browser": true,
"node": false
}
}
Типичные проблемы:
browser, но используется
windownode, но используется
processes2021, es2022Результат: ESLint начинает выдавать ошибки о несуществующих переменных.
globalsИногда разработчики пытаются вручную объявить глобальные переменные:
{
"globals": {
"MY_API": "readonly"
}
}
Ошибки:
writable без
необходимостиenveslint-envПоследствия:
no-undef перестают работать корректноoverridesoverrides часто используются для разделения конфигурации
по типам файлов.
{
"overrides": [
{
"files": ["*.test.js"],
"rules": {
"no-unused-expressions": "off"
}
}
]
}
Типичные ошибки:
files, из-за чего override применяется ко
всему проектуignorePatterns и .eslintignore)Ошибки в игнорировании приводят либо к избыточной проверке, либо к её отсутствию.
Типичные проблемы:
.eslintignore и
ignorePatternsdist/, но не build/{
"ignorePatterns": ["dist", "node_modules"]
}
Последствие: линтер либо тормозит, либо не проверяет нужные файлы.
Экосистема ESLint сильно зависит от версии ядра.
Типичные сценарии:
eslint-plugin-react без поддержки новых ASTСимптомы:
Definition for rule not foundCannot read properties of undefinedFlat config вводит принципиально новый формат:
export default [
{
files: ["**/*.js"],
rules: {
semi: "error"
}
}
]
Типичные ошибки миграции:
extends.eslintrc ключейПричина проблем: flat config требует явного импорта плагинов:
import js from "@eslint/js";
export default [
js.configs.recommended
]
rules
конфигурацииНеправильная структура правил — частый источник ошибок.
{
"rules": {
"quotes": ["error", "double", "unexpected-extra"]
}
}
Проблемы:
"error" вместо 2)Результат: ESLint падает при загрузке конфигурации.
{
"extends": [
"plugin:@typescript-eslint/recommended"
]
}
Ошибки возникают, когда:
typescript@typescript-eslint/eslint-pluginЧастая причина «странного поведения» линтера.
Проблема: ESLint и Prettier начинают спорить о форматировании.
{
"extends": ["eslint:recommended", "prettier"]
}
Ошибки конфигурации:
eslint-config-prettierroot в legacy конфигурации{
"root": false
}
Последствия:
Монорепозитории усиливают конфигурационные проблемы.
Типичные ошибки:
overrides для пакетовСимптомы:
settings{
"settings": {
"react": {
"version": "detect"
}
}
}
Ошибки:
ESLint использует Node resolution, и ошибки путей встречаются часто.
Типичные ситуации:
"plugin": "./plugins/eslint-plugin-custom"import/resolverЧасто проблема не в конфигурации, а в неверном понимании сообщения:
На уровне архитектуры проекта ошибки возникают из-за: