В проектах на JavaScript и TypeScript количество файлов может исчисляться тысячами. Полная проверка всей кодовой базы при каждом запуске ESLint увеличивает время анализа и нередко приводит к появлению большого количества нерелевантных предупреждений. Для управления областью проверки ESLint предоставляет несколько механизмов:
--ext для указания расширений файлов;.eslintignore и настройки
ignores;Грамотное ограничение области анализа позволяет существенно ускорить работу линтера и сделать процесс проверки более предсказуемым.
--extПо умолчанию ESLint анализирует не все возможные типы файлов. Если проект содержит файлы с различными расширениями, необходимо явно сообщить линтеру, какие из них следует проверять.
Базовый синтаксис:
eslint src --ext .js
В данном случае ESLint:
src;.js.Современные проекты редко ограничиваются только JavaScript. Часто используются JSX, TypeScript и TSX.
eslint src --ext .js,.jsx,.ts,.tsx
Теперь в область проверки попадают:
app.jsButton.jsxservice.tsPage.tsxПри обходе директорий ESLint будет игнорировать файлы других типов.
--ext в TypeScript-проектахРассмотрим структуру:
project/
├── src/
│ ├── app.ts
│ ├── user.ts
│ └── components/
│ └── Header.tsx
└── tests/
└── app.test.ts
Команда:
eslint . --ext .ts,.tsx
заставляет ESLint искать только TypeScript-файлы по всему проекту.
Без указания расширений некоторые файлы могут не попасть в анализ в зависимости от конфигурации и способа запуска.
Проверка может быть ограничена набором каталогов.
eslint src tests --ext .js,.ts
Будут проверены только:
src/**
tests/**
Другие каталоги останутся вне области анализа.
Например:
project/
├── src/
├── tests/
├── docs/
└── scripts/
Файлы внутри docs и scripts проверяться не
будут.
ESLint позволяет запускать анализ для конкретного файла.
eslint src/index.js
Или нескольких файлов:
eslint src/index.js src/utils.js
Подход часто используется:
Для гибкого выбора файлов применяются glob-паттерны.
Пример:
eslint "src/**/*.js"
Паттерн означает:
src — корневая директория поиска;** — любое количество вложенных директорий;*.js — все JavaScript-файлы.Структура:
src/
├── index.js
├── api/
│ ├── users.js
│ └── auth.js
└── ui/
└── button.js
Будут проверены все перечисленные файлы.
*Одиночная звёздочка соответствует любому набору символов внутри одного уровня каталога.
Пример:
eslint "src/*.js"
Подходит для:
src/app.js
src/index.js
src/config.js
Не подходит для:
src/api/user.js
src/components/button.js
Поскольку вложенные директории не учитываются.
**Двойная звёздочка позволяет проходить через любое количество подкаталогов.
Пример:
eslint "src/**/*.js"
Подходит для:
src/app.js
src/api/user.js
src/api/v1/users.js
src/components/forms/login.js
Это один из наиболее часто используемых шаблонов в крупных проектах.
?Символ вопроса соответствует одному произвольному символу.
Пример:
eslint "src/file?.js"
Подходит для:
src/file1.js
src/file2.js
src/fileA.js
Не подходит:
src/file10.js
src/fileABC.js
Поскольку после слова file ожидается ровно один
символ.
Glob-паттерны позволяют объединять варианты расширений.
Пример:
eslint "src/**/*.{js,jsx}"
Будут найдены:
src/app.js
src/components/Button.jsx
Аналогичный вариант для TypeScript:
eslint "src/**/*.{ts,tsx}"
Допускается передавать несколько шаблонов одновременно.
eslint "src/**/*.js" "tests/**/*.js"
Будут обработаны:
src/**
tests/**
Такой подход удобен, когда разные директории содержат код различного назначения.
Во многих проектах возникает необходимость анализировать только тестовые файлы.
Например:
eslint "**/*.test.js"
Будут выбраны:
user.test.js
api.test.js
auth.test.js
А обычные файлы:
user.js
api.js
в проверку не попадут.
Возможен поиск по шаблону имени файла.
Пример:
eslint "src/**/*Service.js"
Подходит для:
UserService.js
EmailService.js
PaymentService.js
Не подходит:
UserController.js
UserRepository.js
--ext и glob-паттерновЧасто оба механизма применяются одновременно.
Пример:
eslint src --ext .js,.jsx
Здесь:
src..js и
.jsx.Другой вариант:
eslint "src/**/*" --ext .ts,.tsx
Линтер перебирает все найденные файлы и оставляет только TypeScript-расширения.
Рекомендуется заключать glob-паттерны в кавычки.
Правильно:
eslint "src/**/*.js"
Нежелательно:
eslint src/**/*.js
Причина заключается в том, что разные оболочки операционной системы по-разному обрабатывают шаблоны. Кавычки позволяют передать паттерн непосредственно ESLint без предварительного раскрытия оболочкой.
.eslintignoreДаже если файл подходит под указанный паттерн, он может быть исключён.
Пример файла .eslintignore:
node_modules/
dist/
coverage/
Команда:
eslint "src/**/*.js"
не будет анализировать:
dist/app.js
coverage/report.js
если они попадают под правила игнорирования.
ignores в Flat ConfigВ современных конфигурациях ESLint используется свойство
ignores.
Пример:
export default [
{
ignores: [
"dist/**",
"coverage/**"
]
}
];
Даже при запуске:
eslint .
содержимое указанных директорий будет исключено из анализа.
Упрощённая последовательность работы ESLint выглядит следующим образом:
--ext.Например:
eslint "src/**/*" --ext .js,.ts
При структуре:
src/
├── app.js
├── service.ts
├── styles.css
└── image.png
В итоговый список попадут только:
app.js
service.ts
Часто область проверки фиксируется в package.json.
Пример:
{
"scripts": {
"lint": "eslint src --ext .js,.jsx",
"lint:ts": "eslint src --ext .ts,.tsx"
}
}
Или через шаблоны:
{
"scripts": {
"lint": "eslint \"src/**/*.{js,jsx}\""
}
}
Такой подход обеспечивает единообразный запуск линтера для всех участников проекта.
В монорепозитории может присутствовать несколько независимых пакетов.
Структура:
packages/
├── frontend/
├── backend/
└── shared/
Проверка только фронтенда:
eslint "packages/frontend/**/*.{js,jsx,ts,tsx}"
Проверка только бэкенда:
eslint "packages/backend/**/*.ts"
Подобное разделение позволяет уменьшить время выполнения линтера и запускать проверки независимо друг от друга.
eslint src/**/*.js
Поведение может различаться между Bash, Zsh, PowerShell и другими оболочками.
Корректнее:
eslint "src/**/*.js"
eslint src --ext js
Следует использовать точку:
eslint src --ext .js
eslint .
В крупных проектах такая команда может привести к анализу тысяч файлов, включая временные каталоги и служебные директории.
Часто предпочтительнее:
eslint src tests --ext .js,.ts
Пример:
eslint "src/**.js"
Ожидаемый рекурсивный поиск работать не будет.
Правильный вариант:
eslint "src/**/*.js"
eslint src --ext .js
eslint src --ext .js,.jsx
eslint src --ext .ts,.tsx
eslint "tests/**/*.test.js"
eslint src tests scripts --ext .js,.ts
eslint "**/*.ts"
eslint "src/**/*.{js,jsx}"
eslint "packages/**/*.{js,ts,jsx,tsx}"
Комбинирование параметра --ext, точечного указания
директорий и glob-паттернов образует основной механизм управления
областью проверки в ESLint. Благодаря этим инструментам можно точно
определить набор анализируемых файлов, сократить время выполнения
линтера и исключить попадание в проверку служебных, сгенерированных или
нерелевантных ресурсов проекта.