В системе линтинга ESLint конфигурации не существуют изолированно. При запуске анализа файлов формируется цепочка конфигурационных файлов, которая определяется структурой каталогов проекта и правилами наследования.
Конфигурация может быть задана в нескольких форматах:
.eslintrc.eslintrc.json.eslintrc.js.eslintrc.cjspackage.json (поле eslintConfig)eslint.config.js в новых версиях)При использовании классической модели .eslintrc ESLint
строит иерархию конфигураций, начиная от каталога файла и поднимаясь
вверх по дереву директорий.
При анализе конкретного файла ESLint выполняет обход файловой системы вверх по дереву директорий:
Каждый найденный конфигурационный файл становится частью общей конфигурационной цепочки. В результате формируется итоговый набор правил, плагинов и настроек.
Свойство root является ключевым механизмом управления
границами конфигурационной иерархии в классической системе
.eslintrc.
{
"root": true
}
root определяет, должна ли ESLint продолжать поиск
конфигураций в родительских директориях.
root: true — останавливает поиск конфигураций выше
текущей директорииroot: false или отсутствие свойства — поиск
продолжается вверх по деревуТаким образом, root задаёт границу конфигурационного
контекста.
При установке root: true в конфигурации происходит
обрезка цепочки наследования:
Это особенно важно в случаях, когда проект находится внутри другой кодовой базы, где уже существует глобальная конфигурация ESLint.
Пример структуры:
/repo
.eslintrc (root: true)
/packages
/app
.eslintrc
index.js
В данной структуре конфигурация в /repo/.eslintrc не
будет влиять на /packages/app/.eslintrc, если внутри него
установлен root: true.
При отсутствии root или его значении false
ESLint объединяет конфигурации по цепочке директорий:
Это поведение может приводить к неочевидным эффектам, когда правила из верхних директорий неожиданно применяются к вложенным проектам.
Конфигурационная система ESLint использует стратегию глубокого объединения:
rules, env,
globals) сливаются по ключамИерархия конфигураций формируется снизу вверх:
корневая конфигурация
↓
промежуточные директории
↓
локальная конфигурация файла
При этом root может разорвать эту цепочку на любом
уровне.
В монорепозиториях root играет роль механизма изоляции
пакетов:
/monorepo
.eslintrc (root: true)
/packages
/frontend
.eslintrc
/backend
.eslintrc
Каждый пакет может иметь собственную конфигурацию, но глобальные правила верхнего уровня будут применяться только если локальные конфигурации не ограничивают область видимости.
При установке root: true в каждом пакете достигается
полная независимость линтинга между частями монорепозитория.
При наличии нескольких конфигурационных слоёв возможны конфликты:
off, warn,
error)При разрешении конфликтов действует принцип приоритета более близкой конфигурации к файлу.
Однако root изменяет саму структуру поиска, устраняя
влияние внешних конфигураций, что фактически убирает целые уровни
потенциальных конфликтов.
В flat config модели, применяемой в новых версиях ESLint, концепция
root становится менее критичной, поскольку конфигурация
задаётся явно и не зависит от автоматического поиска вверх по дереву
директорий.
Тем не менее в проектах, использующих смешанные подходы или
переходные версии, поведение root сохраняет значение для
совместимости и контроля границ.
Использование root фактически формирует изолированный
контекст линтинга:
Такая изоляция особенно важна при интеграции сторонних библиотек или при встраивании проекта в более крупную систему сборки.