ESLint при анализе проекта выполняет синтаксический и семантический разбор каждого файла, применяет цепочку правил и формирует отчёт о нарушениях. В больших проектах этот процесс становится затратным по времени, особенно при повторных запусках, когда значительная часть файлов остаётся неизменной. Механизм кеширования решает эту проблему за счёт сохранения результатов предыдущего анализа и повторного использования их при последующих запусках.
Флаг --cache активирует встроенную систему кеширования
результатов линтинга, позволяя ESLint пропускать файлы, которые не
изменились с момента последней проверки.
При включении кеширования ESLint:
Кеш хранится в виде файла .eslintcache в корне проекта,
если не указано иное.
Стандартное поведение при запуске:
eslint . --cache
После первого выполнения создаётся файл кеша, содержащий информацию о проверенных файлах и их результатах.
По умолчанию используется файл:
.eslintcache
Он хранит сериализованные данные о:
Расположение можно изменить:
eslint . --cache --cache-location ./node_modules/.cache/eslintcache
Это особенно важно для CI-сред или монорепозиториев, где требуется изоляция кеша по проектам.
Кеш инвалидируется при изменении содержимого файла. Однако важно учитывать, что ESLint не всегда опирается только на содержимое:
.eslintrc,
eslint.config.js) могут привести к частичному или полному
сбросу кеша;Таким образом, кеш ускоряет процесс, но не гарантирует абсолютной неизменности результатов без пересчёта при изменении окружения.
ESLint поддерживает различные стратегии кеширования через параметр
--cache-strategy.
Основные варианты:
metadata — учитываются метаданные файлов (размер, время
изменения и т.д.);content — используется хэш содержимого файла (более
надёжный подход).Пример использования:
eslint . --cache --cache-strategy content
Стратегия content обеспечивает более стабильное
поведение в условиях CI и при работе с системами контроля версий, где
временные метки могут быть ненадёжны.
Наиболее заметный эффект кеширования проявляется в проектах:
Ускорение достигается за счёт того, что ESLint полностью пропускает обработку неизменённых файлов, снижая нагрузку на парсер и систему правил.
В CI-средах кеширование требует осторожности:
Типичный подход в CI:
eslint . --no-cache
eslint . --cache --cache-location .cache/eslint-ci
При этом кеш может сохраняться как артефакт между job-ами.
В монорепозиториях кеширование требует разделения между пакетами, чтобы изменения в одном модуле не приводили к некорректному использованию кеша другого.
Подходы:
--cache-location:eslint packages/app --cache --cache-location packages/app/.eslintcache
Это снижает риск коллизий и ускоряет частичные проверки.
Любое изменение конфигурационных файлов может привести к сбросу кеша:
.eslintrc.*eslint.config.jsESLint отслеживает изменения конфигурации, поскольку они напрямую влияют на результаты проверки. Даже при неизменных исходных файлах изменение правила может сделать кешированные результаты невалидными.
Кеширование активно используется в связке с:
В таких сценариях кеш уменьшает задержку повторных проверок, особенно при инкрементальной разработке.
Несмотря на эффективность, механизм имеет ограничения:
Кеш-файл может становиться источником расхождений, если не синхронизируется с конфигурацией проекта.
Кеш можно принудительно игнорировать:
eslint . --no-cache
В этом режиме ESLint полностью пересчитывает результаты, не используя сохранённые данные. Это используется при: