ESLint поддерживает несколько способов описания конфигурации линтера, каждый из которых ориентирован на разные сценарии разработки и уровни гибкости. Основные форматы — JavaScript, JSON и YAML. Несмотря на различия в синтаксисе, все они описывают один и тот же набор сущностей: правила анализа кода, окружения, парсер, плагины и параметры интерпретации.
Независимо от формата, конфигурация ESLint обычно включает следующие ключевые поля:
env — предустановленные среды выполненияextends — базовые конфигурацииparser — используемый парсерparserOptions — настройки разбора кодаplugins — подключаемые плагиныrules — набор правилoverrides — переопределения для отдельных файловroot — остановка поиска конфигурации вверх по дереву
директорийЭти поля интерпретируются ESLint одинаково во всех форматах.
JavaScript-конфигурация представляет собой наиболее гибкий вариант, так как позволяет использовать всю мощь языка: условия, функции, импорт модулей и динамическую генерацию конфигурации.
module.exports = {
env: {
browser: true,
node: true,
},
extends: ["eslint:recommended"],
parserOptions: {
ecmaVersion: 2022,
sourceType: "module",
},
rules: {
semi: ["error", "always"],
quotes: ["error", "single"],
},
};
1. Динамическая логика
const isProduction = process.env.NODE_ENV === "production";
module.exports = {
rules: {
"no-console": isProduction ? "error" : "warn",
},
};
Конфигурация может изменяться в зависимости от окружения, что делает формат пригодным для сложных проектов.
2. Импорт модулей
const base = require("./base.eslintrc");
module.exports = {
...base,
rules: {
...base.rules,
"no-debugger": "error",
},
};
Поддержка модульной композиции позволяет строить иерархии конфигураций.
3. Использование функций
module.exports = function () {
return {
rules: {
"no-unused-vars": "warn",
},
};
};
Функциональный подход применяется для генерации конфигураций на основе внешних параметров.
JSON-конфигурация является строго статической и наиболее ограниченной по возможностям. Она используется там, где важна простота и универсальность.
{
"env": {
"browser": true,
"node": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 2022,
"sourceType": "module"
},
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "single"]
}
}
JSON-конфигурации чаще применяются в библиотечных или учебных проектах, где важна прозрачность и совместимость.
JSON допускает как строку, так и массив:
{
"extends": ["eslint:recommended", "plugin:react/recommended"]
}
YAML-конфигурация занимает промежуточное положение между JSON и JavaScript. Она более читаема, чем JSON, и допускает комментарии, но не поддерживает динамическую логику.
env:
browser: true
node: true
extends:
- eslint:recommended
parserOptions:
ecmaVersion: 2022
sourceType: module
rules:
semi:
- error
- always
quotes:
- error
- single
1. Читаемость
Отсутствие скобок делает конфигурацию более визуально чистой, особенно при больших объёмах правил.
2. Поддержка комментариев
# Включение браузерного окружения
env:
browser: true
Комментарии позволяют документировать конфигурацию прямо в файле.
3. Структурированность
Вложенные объекты читаются естественно без синтаксического шума.
ESLint может одновременно учитывать несколько конфигурационных файлов, применяя их по правилам наследования.
overrides внутри конфигурацииextendsroot не
установлен)extends позволяет наследовать набор правил из:
eslint:recommended)plugin:react/recommended)airbnb,
standard)Пример:
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
]
Конфигурация строится каскадно: каждое последующее расширение переопределяет предыдущие значения.
overrides позволяет применять разные правила для
различных типов файлов.
module.exports = {
rules: {
"no-console": "warn",
},
overrides: [
{
files: ["*.test.js"],
rules: {
"no-console": "off",
},
},
],
};
Это особенно важно для разделения production-кода и тестов.
Независимо от формата, parserOptions задаёт параметры
интерпретации ECMAScript:
Пример:
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
}
Поле rules определяет поведение линтера на уровне
синтаксиса и стиля.
Каждое правило имеет формат:
"имя-правила": [уровень, параметры]
Уровни:
"off" или 0"warn" или 1"error" или 2Пример:
rules: {
"no-unused-vars": "error",
"eqeqeq": ["error", "always"],
}
JavaScript-конфигурация применяется в системах с:
JSON используется в:
YAML встречается:
module.exportsJavaScript-формат позволяет строить обёртки над ESLint-конфигурацией:
function createConfig({ strict }) {
return {
rules: {
"no-console": strict ? "error" : "warn",
},
};
}
module.exports = createConfig({ strict: true });
Такой подход используется в корпоративных стандартах кодирования.
ESLint выбирает один основной файл конфигурации, но при отсутствии
root: true может подниматься вверх по директориям и
комбинировать несколько источников.
Приоритет определяется типом конфигурации и близостью к анализируемому файлу, а не форматом как таковым.