Структура eslint.config.js в современной конфигурации
ESLint (flat config) строится как последовательность объектов
конфигурации, объединённых в единый экспорт. В отличие от классического
.eslintrc, где использовались вложенные поля и механизм
overrides, новый формат опирается на явную композицию и
порядок применения конфигураций сверху вниз.
Файл eslint.config.js представляет собой модуль
JavaScript, который экспортирует массив:
export default [
// конфигурационные объекты
];
Каждый элемент массива — отдельный блок конфигурации. ESLint применяет их последовательно, объединяя результаты. Порядок элементов имеет критическое значение: более поздние блоки могут переопределять предыдущие.
Типичный объект конфигурации содержит следующие ключевые поля:
filesignoreslanguageOptionspluginsrulessettingslinterOptionsКаждое поле отвечает за отдельный аспект анализа кода.
files определяет, к каким файлам применяется конкретный
блок конфигурации.
{
files: ["src/**/*.js"]
}
Возможные варианты:
"index.js""src/**/*.ts"Если поле отсутствует, конфигурация применяется ко всем файлам проекта (если не ограничена другими блоками).
ignores задаёт пути, которые ESLint полностью исключает
из обработки.
{
ignores: ["dist/**", "node_modules/**"]
}
Особенности:
Пример глобального исключения:
export default [
{
ignores: ["dist/**"]
}
];
languageOptions определяет, как ESLint должен понимать
исходный код.
languageOptions: {
ecmaVersion: 2022
}
Определяет версию ECMAScript, влияя на доступные синтаксические конструкции.
Часто используются значения:
2020, 2021, 2022,
latestsourceType: "module"
Возможные значения:
"script" — классический JavaScript"module" — ES ModulesОпределяет доступные глобальные переменные:
languageOptions: {
globals: {
window: "readonly",
document: "readonly"
}
}
Значения:
"readonly" — только чтение"writable" — можно переопределятьПозволяет заменить стандартный парсер:
import babelParser from "@babel/eslint-parser";
languageOptions: {
parser: babelParser
}
Используется при работе с нестандартным синтаксисом (TypeScript, экспериментальные предложения).
Дополнительные настройки парсера:
languageOptions: {
parserOptions: {
ecmaFeatures: {
jsx: true
}
}
}
В flat config плагины подключаются как объекты:
import js from "@eslint/js";
import react from "eslint-plugin-react";
export default [
{
plugins: {
js,
react
}
}
];
Ключи объекта — имена плагинов, используемые в правилах:
rules: {
"react/jsx-uses-react": "error"
}
Особенность flat config: плагины необходимо импортировать явно, автоматической загрузки по строковому имени нет.
rules — центральная часть ESLint-конфигурации.
rules: {
"no-unused-vars": "error",
"no-console": "warn"
}
Форматы задания:
"off" — отключено"warn" — предупреждение"error" — ошибкаrules: {
"eqeqeq": ["error", "always"],
"quotes": ["error", "single", { avoidEscape: true }]
}
Первый элемент массива — уровень строгости, последующие — параметры правила.
settings передаёт общие значения, используемые
несколькими правилами или плагинами.
settings: {
react: {
version: "detect"
}
}
Характерные случаи:
Этот блок управляет внутренним поведением линтера:
linterOptions: {
reportUnusedDisableDirectives: true
}
Часто используемые опции:
reportUnusedDisableDirectives — проверка неиспользуемых
eslint-disablenoInlineConfig — запрет inline-конфигураций в кодеГлавная особенность eslint.config.js — композиция через
массив:
export default [
{
files: ["**/*.js"],
rules: {
"no-console": "warn"
}
},
{
files: ["**/*.test.js"],
rules: {
"no-console": "off"
}
}
];
Принцип работы:
files формирует итоговый набор правилПри вычислении итоговой конфигурации учитываются следующие правила:
ignores исключает файлы до анализаВ flat config отсутствуют привычные механизмы:
overrides заменён множественными объектами с
filesextends заменён импортом готовых конфигураций и их
включением в массивПример:
import js from "@eslint/js";
export default [
js.configs.recommended,
{
rules: {
"no-debugger": "error"
}
}
];
Комбинированный пример структуры:
import js from "@eslint/js";
import react from "eslint-plugin-react";
export default [
{
ignores: ["dist/**", "build/**"]
},
js.configs.recommended,
{
files: ["src/**/*.js"],
languageOptions: {
ecmaVersion: 2022,
sourceType: "module",
globals: {
window: "readonly"
}
},
plugins: {
react
},
rules: {
"no-console": "warn"
},
settings: {
react: {
version: "detect"
}
},
linterOptions: {
reportUnusedDisableDirectives: true
}
}
];
Структура eslint.config.js строится на трёх базовых
принципах:
files,
ignores)languageOptions)Эта модель делает конфигурацию более предсказуемой, устраняя скрытые уровни наследования и неявные расширения.