Механизм игнорирования файлов в flat config ESLint основан на явном
описании исключений прямо внутри конфигурационного массива, без
использования отдельного .eslintignore как основного
источника правил. Flat config (начиная с ESLint 9) смещает модель
конфигурации в сторону декларативного списка объектов, где каждая часть
конфигурации может содержать собственные правила включения и
исключения.
В flat config игнорирование файлов реализуется через поле
ignores. Оно задаётся в конфигурационных объектах и
принимает массив строковых шаблонов.
export default [
{
ignores: ["dist/**", "node_modules/**"]
},
{
files: ["src/**/*.js"],
rules: {
semi: ["error", "always"]
}
}
];
Ключевая особенность заключается в том, что ignores
применяется до анализа файлов ESLint и исключает совпадающие пути из
процесса линтинга полностью.
Flat config представляет собой упорядоченный массив объектов. Каждый
объект влияет на итоговую конфигурацию, но ignores работает
глобально по принципу фильтрации входного набора файлов.
Если файл совпадает с любым из паттернов ignores, он
исключается из дальнейшей обработки, независимо от того, какие
files указаны в последующих конфигурационных объектах.
export default [
{
ignores: ["build/**"]
},
{
files: ["build/index.js"],
rules: {
"no-console": "error"
}
}
];
В данном случае build/index.js никогда не будет
проверяться, несмотря на явное совпадение с files.
Шаблоны в ignores используют глобоподобный синтаксис,
аналогичный minimatch:
** — рекурсивное соответствие директорий* — соответствие части имени файла! — отрицание шаблона (в зависимости от контекста
конфигурации)Примеры:
ignores: [
"**/*.min.js",
"coverage/**",
"dist/**/*.map",
"temp-*"
]
Важно учитывать, что flat config не полагается на
.eslintignore как основной механизм, поэтому поведение
игнорирования определяется исключительно конфигурацией.
В традиционной конфигурации ESLint использовался файл
.eslintignore. В flat config он считается устаревшим
механизмом и не является основным источником игнорирования.
Основные различия:
.eslintignore — внешний файл, не связанный с
конфигурационным массивомignores — часть JavaScript-конфигурацииВ flat config игнорирование становится частью кода, а не внешней декларацией.
Часто используется паттерн, при котором первый объект конфигурации содержит глобальные исключения:
export default [
{
ignores: [
"node_modules/**",
"dist/**",
"coverage/**"
]
}
];
Такой подход обеспечивает единый слой фильтрации до применения любых правил.
Хотя ignores работает глобально, ограничение области
анализа чаще реализуется через files, а не через
отрицательные шаблоны.
export default [
{
ignores: ["**/*.test.js"]
},
{
files: ["src/**/*.js"],
rules: {
"no-debugger": "error"
}
}
];
Здесь тестовые файлы полностью исключены, а линтинг применяется только к исходному коду.
В flat config отсутствует классическая модель наследования
.eslintrc. Вместо этого порядок объектов в массиве
определяет итоговое поведение.
Однако ignores действует на уровне фильтрации входных
файлов и не переопределяется последующими объектами.
Это означает:
rules, files или
languageOptions не могут его «вернуть»ignoresВ некоторых конфигурациях применяется отрицание через !
для повторного включения файлов, если они были исключены ранее другим
шаблоном.
export default [
{
ignores: [
"dist/**",
"!dist/keep.js"
]
}
];
Такой подход требует осторожности, поскольку порядок паттернов влияет на результат: последнее совпадение определяет итоговое состояние.
В проектах с несколькими слоями конфигурации (например,
монорепозитории) ignores часто комбинируется с разделением
files:
export default [
{
ignores: ["packages/*/dist/**"]
},
{
files: ["packages/*/src/**/*.js"],
rules: {
"no-unused-vars": "error"
}
},
{
files: ["packages/*/scripts/**/*.js"],
rules: {
"no-console": "off"
}
}
];
Такой подход позволяет централизованно исключать артефакты сборки и одновременно управлять разными зонами кода.
Если файл совпадает одновременно с files и
ignores, приоритет всегда остаётся за ignores.
Это фундаментальное правило flat config: исключения имеют более высокий
приоритет, чем включения.
export default [
{
ignores: ["src/legacy/**"]
},
{
files: ["src/legacy/**/*.js"],
rules: {
"no-var": "error"
}
}
];
Несмотря на совпадение files, каталог
src/legacy полностью исключён.
В реальных конфигурациях игнорируемые пути обычно группируются по категориям:
node_modulesdist, buildcoverage.cache, .tempignores: [
"node_modules/**",
"dist/**",
"build/**",
"coverage/**",
".cache/**",
"*.min.js"
]
Исключение файлов на уровне конфигурации уменьшает объём входных данных для ESLint. Это напрямую влияет на:
Чем раньше файл исключён через ignores, тем меньше
вычислений выполняет ESLint.
Несмотря на гибкость, механизм имеет ряд ограничений:
Эти ограничения компенсируются структурированием массива конфигураций
и разделением зон files.
При использовании сборщиков (Vite, Webpack, Rollup) часто возникает
дублирование игнорирования. ESLint flat config не синхронизируется с
ними автоматически, поэтому ignores должен явно повторять
критические исключения сборки.
Наиболее частый паттерн:
distdistИгнорирование файлов в flat config выполняет не вспомогательную, а фундаментальную функцию фильтрации входного множества. В отличие от legacy-конфигурации, где игнорирование было внешним слоем, здесь оно становится частью декларативной структуры конфигурации и участвует в формировании входного набора данных для анализа.