Glob-паттерны представляют собой компактный язык описания наборов файлов по маскам путей. В конфигурации ESLint они используются для определения того, какие файлы должны анализироваться, какие правила применяются к разным частям проекта и какие каталоги исключаются из проверки.
В основе лежит сопоставление строк путей с шаблонами, где специальные
символы заменяют группы символов или целые сегменты пути. ESLint
опирается на реализацию, совместимую с
minimatch/micromatch, поэтому поведение
glob-паттернов совпадает с привычной экосистемой
Node.js-инструментов.
Звёздочка * Заменяет любую
последовательность символов в пределах одного сегмента пути. Пример:
*.js — все JavaScript-файлы в текущем каталогеsrc/*.js — только файлы в src, без
вложенных директорийДвойная звезда ** Означает рекурсивное
соответствие любому количеству уровней вложенности.
**/*.js — все .js файлы во всём
проектеsrc/**/*.test.js — тестовые файлы в любом подкаталоге
srcВопросительный знак ? Соответствует
ровно одному символу.
file?.js совпадает с file1.js,
fileA.js, но не file10.jsКвадратные скобки [] Диапазоны или
наборы символов.
file[12].js → file1.js,
file2.jsfile[a-c].js → filea.js,
fileb.js, filec.jsФигурные скобки {} Группировка
альтернатив.
*.{js,ts} — файлы JavaScript и TypeScriptsrc/**/*.{spec,test}.js — разные типы тестовОтрицание ! Исключение файлов из
набора.
!node_modules/** — исключение зависимостейВ формате .eslintrc glob-паттерны применяются в
нескольких ключевых местах: files,
excludedFiles, ignorePatterns.
files в
overridesМеханизм overrides позволяет применять разные правила к
разным наборам файлов:
{
"overrides": [
{
"files": ["**/*.ts"],
"rules": {
"no-unused-vars": "off"
}
},
{
"files": ["src/**/*.test.js"],
"env": {
"jest": true
}
}
]
}
Здесь glob определяет область действия конкретного набора правил.
Каждый блок overrides фактически формирует отдельный
контекст линтинга.
ignorePatternsГлобальные исключения описываются через массив паттернов:
{
"ignorePatterns": [
"dist/**",
"build/**",
"node_modules/**",
"**/*.min.js"
]
}
Особенность состоит в том, что эти паттерны применяются до анализа файлов и уменьшают набор входных данных для линтера.
Современная система конфигурации ESLint использует flat config, где glob-паттерны стали ещё более значимыми.
filesexport default [
{
files: ["**/*.js"],
rules: {
semi: "error"
}
},
{
files: ["src/**/*.{ts,tsx}"],
rules: {
"@typescript-eslint/no-unused-vars": "error"
}
}
];
Каждый объект конфигурации привязывается к набору файлов через glob. Это основной механизм сегментации проекта.
ignoresexport default [
{
ignores: [
"dist/**",
"coverage/**",
"**/*.min.js"
]
}
];
В flat config исключения становятся частью декларативного массива
конфигурации и заменяют .eslintignore.
Glob-паттерны в ESLint работают относительно корня проекта, который определяется расположением конфигурационного файла. Это приводит к нескольким важным особенностям:
/)\) приводятся к стандартному
видуНапример, файл src\utils\index.js будет
интерпретироваться как src/utils/index.js.
При использовании нескольких уровней конфигурации glob-паттерны участвуют в системе приоритетов.
ignores / ignorePatterns — исключают файлы
до применения правилfiles в конфигурационных блоках — определяют
применимость правилoverrides (в классической конфигурации) — уточняют или
переопределяют поведениеВ flat config порядок объектов в массиве также имеет значение: последующие записи могут переопределять предыдущие для совпадающих файлов.
Glob-паттерны позволяют строить сложные выражения для реальных структур проектов.
src/api/**/*.js — слой APIsrc/ui/**/*.tsx — UI-компонентыsrc/shared/**/*.{js,ts} — общие модули**/*.test.{js,ts} — тесты**/*.config.{js,cjs,mjs} — конфигурационные файлы**/*.{spec,benchmark}.js — специальные сценарииignores: [
"**/*",
"!src/**"
]
Такая конструкция сначала исключает всё, а затем возвращает часть файлов обратно в анализ.
Файлы, начинающиеся с точки, по умолчанию не всегда попадают в
**/*.
.env.eslintrc.jsДля их включения используется явное указание:
**/.*.*Паттерн ** способен пересекать любое количество
директорий:
a/**/b.js совпадает с:
a/b.jsa/x/b.jsa/x/y/z/b.js"**/*.{js,jsx,ts,tsx}"
Такой шаблон часто используется в монорепозиториях, где единая линтер-конфигурация покрывает несколько технологий.
Неправильно составленные glob-выражения могут существенно замедлить линтинг больших проектов.
Наиболее затратные конструкции:
** на корневом уровне
(**/*.js в огромных монорепозиториях)Более эффективные подходы:
src/** вместо глобального
**Базовый JavaScript проект
**/*.js!node_modules/**dist/**TypeScript проект
**/*.{ts,tsx}**/*.d.ts!dist/**Frontend приложение
src/**/*.{js,jsx,ts,tsx}public/****/*.stories.*Монорепозиторий
packages/*/src/**/*apps/*/src/**/*tools/**Плагины ESLint не изменяют сам синтаксис glob, но используют его внутри собственных правил конфигурации. Это приводит к каскадному применению шаблонов:
files определяют область проектаНесмотря на гибкость, glob не является полноценным языком запросов:
Поэтому glob используется только как механизм отбора файлов, а не анализа структуры проекта.
Если один файл совпадает с несколькими конфигурационными блоками, применяется объединение или переопределение:
Например:
[
{
files: ["**/*.js"],
rules: { semi: "error" }
},
{
files: ["src/**/*.js"],
rules: { semi: "off" }
}
]
Файл src/app.js попадёт под оба блока, но итоговое
поведение зависит от порядка.
Стабильные конфигурации обычно придерживаются нескольких принципов:
Такая структура снижает неоднозначность и упрощает масштабирование конфигурации в больших кодовых базах.