Конфигурация ESLint определяет поведение анализатора кода: какие
правила активны, как обрабатываются различные файлы проекта, какие
плагины подключены и каким образом интерпретируется синтаксис
JavaScript. Структура конфигурации эволюционировала от каскадных
.eslintrc файлов к современной плоской модели
eslint.config.js, что повлияло на способ композиции и
расширения правил.
.eslintrcИсторически ESLint использовал несколько вариантов файлов конфигурации:
.eslintrc.eslintrc.json.eslintrc.yml.eslintrc.jseslintConfig в package.jsonНа уровне структуры все они описывали один и тот же набор сущностей:
{
"env": {},
"extends": [],
"parser": "",
"parserOptions": {},
"plugins": [],
"rules": {},
"settings": {},
"overrides": []
}
Ключевая особенность — каскадное наследование. Конфигурации могли накладываться друг на друга по иерархии директорий.
eslint.config.js)Современный формат ESLint основан на плоской структуре конфигурации. Вместо каскадного наследования используется массив объектов:
export default [
{
files: ["**/*.js"],
languageOptions: {},
rules: {},
plugins: {}
}
];
Главное отличие — отсутствие скрытого наследования. Все слои конфигурации объявлены явно.
rulesСекция rules определяет набор правил линтинга. Каждое
правило задаётся парой: имя → уровень/настройка.
{
"rules": {
"no-unused-vars": "error",
"no-console": "warn",
"eqeqeq": "error"
}
}
Уровни:
"off" — правило отключено"warn" — предупреждение"error" — ошибкаВ расширенной форме допускается конфигурация с параметрами:
{
"rules": {
"quotes": ["error", "single"],
"semi": ["error", "always"]
}
}
parserparser определяет, каким парсером будет анализироваться
код. По умолчанию используется espree.
{
"parser": "@babel/eslint-parser"
}
Использование кастомных парсеров требуется при работе с:
parserOptionsСекция управляет параметрами синтаксического анализа.
{
"parserOptions": {
"ecmaVersion": 2023,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
}
}
Основные поля:
ecmaVersion — версия ECMAScriptsourceType — "script" или
"module"ecmaFeatures — дополнительные флаги (например JSX)envenv определяет предустановленные глобальные переменные
окружения.
{
"env": {
"browser": true,
"node": true,
"es2021": true
}
}
Каждое значение автоматически добавляет соответствующие глобальные объекты и настройки синтаксиса.
globalsПозволяет вручную объявлять глобальные переменные.
{
"globals": {
"MyGlobal": "readonly",
"DEBUG": "writable"
}
}
Варианты режимов:
"readonly""writable""off"pluginsПодключение расширений ESLint.
{
"plugins": ["react", "import"]
}
Плагины добавляют:
В flat-конфигурации плагины задаются как объект:
import react from "eslint-plugin-react";
export default [
{
plugins: {
react
}
}
];
extendsМеханизм наследования конфигураций.
{
"extends": [
"eslint:recommended",
"plugin:react/recommended"
]
}
Источники extends:
В .eslintrc конфигурации объединяются по принципу:
overridesКаждый уровень может переопределять предыдущий.
В eslint.config.js порядок массива определяет
приоритет:
export default [
{ rules: { "no-console": "off" } },
{ rules: { "no-console": "error" } }
];
Последний применённый объект имеет более высокий приоритет.
overridesВ legacy системе overrides позволяет применять разные
настройки для различных файлов.
{
"overrides": [
{
"files": ["*.test.js"],
"rules": {
"no-unused-expressions": "off"
}
}
]
}
Поля внутри overrides повторяют основную структуру
конфигурации.
settingsОбщая область хранения данных, используемых плагинами.
{
"settings": {
"react": {
"version": "detect"
}
}
}
ESLint не интерпретирует эти данные напрямую, передавая их плагинам.
ignorePatternsУправление исключением файлов из анализа.
{
"ignorePatterns": ["dist/", "node_modules/"]
}
В flat-конфигурации используется поле ignores:
export default [
{
ignores: ["dist/**"]
}
];
Flat config представляет собой последовательность объектов, каждый из которых описывает отдельный слой правил.
export default [
// базовый слой
{
files: ["**/*.{js,mjs}"],
languageOptions: {
ecmaVersion: 2022,
sourceType: "module"
},
rules: {
"no-var": "error"
}
},
// слой для тестов
{
files: ["**/*.test.js"],
rules: {
"no-unused-expressions": "off"
}
}
];
files и область
примененияПоле files определяет, к каким файлам применяется
конфигурационный блок.
{
files: ["src/**/*.js"]
}
Поддерживаются glob-шаблоны:
* — один уровень** — рекурсивно? — один символlanguageOptionsВ flat-конфигурации parser и parserOptions
объединены в languageOptions:
{
languageOptions: {
ecmaVersion: 2023,
sourceType: "module",
parser: someParser
}
}
Также сюда входят:
globalsecmaVersionsourceTypeprocessorПроцессоры преобразуют файлы перед анализом ESLint.
{
"processor": "markdown/markdown"
}
Используется для:
В современных проектах конфигурация часто разделяется на модули:
eslint.config.js
eslint.base.js
eslint.react.js
eslint.node.js
И объединяется:
import base from "./eslint.base.js";
import react from "./eslint.react.js";
export default [
...base,
...react
];
В legacy системе ESLint ищет конфигурацию в следующем порядке:
eslintConfig в package.json.eslintrc.js.eslintrc.cjs.eslintrc.json.eslintrc.yml.eslintrcПервый найденный файл становится базовым, остальные участвуют в каскаде.
Flat config устраняет следующие ограничения legacy модели:
Структура становится линейной, состоящей из массива независимых блоков, где каждый блок определяет:
Конфигурации могут комбинироваться на уровне Jav * aScript:
const baseRules = {
"no-console": "warn"
};
const strictRules = {
"no-console": "error",
"eqeqeq": "error"
};
export default [
{
rules: baseRules
},
{
rules: strictRules
}
];
Такой подход делает конфигурацию программируемой, а не декларативной в чистом виде.
Локальная конфигурация относится к конкретному проекту или директории. Глобальная задаётся через:
~/.eslintrcВ flat-системе глобальная конфигурация обычно заменяется отдельным базовым модулем, импортируемым во все проекты.
Каждый конфигурационный файл напрямую влияет на:
Структура конфигурации определяет весь pipeline работы ESLint от чтения файла до выдачи диагностических сообщений.