ESLint поддерживает механизм кэширования результатов линтинга, предназначенный для ускорения повторных запусков за счёт исключения файлов, которые не изменились с момента предыдущей проверки. Этот механизм становится особенно важным в крупных проектах, где анализ тысяч файлов может занимать значительное время.
Кэширование управляется несколькими CLI-параметрами, среди которых
ключевыми являются --cache-location и
--cache-strategy. Они отвечают за разные аспекты хранения и
интерпретации кэшированных данных: первый определяет физическое
расположение кэша, второй — логику того, какие изменения считаются
значимыми для инвалидирования результатов.
--cache-location:
управление местом хранения кэшаПараметр --cache-location задаёт путь к файлу, в котором
ESLint сохраняет кэш результатов предыдущего запуска.
По умолчанию ESLint создаёт файл кэша в локальной файловой системе проекта, обычно:
.eslintcacheЭтот файл располагается в текущей рабочей директории и используется повторно при последующих запусках.
eslint . --cache --cache-location ./tmp/eslint-cache.json
В этом случае кэш переносится в пользовательское расположение. Это особенно важно в следующих сценариях:
/tmp)Кэш-файл содержит сериализованную информацию о состоянии файлов, включая:
Формат кэша не предназначен для ручного редактирования и может изменяться между версиями ESLint.
Изменение --cache-location приводит к:
Это важно учитывать при переключении окружений или веток разработки.
--cache-strategy:
логика инвалидирования кэшаПараметр --cache-strategy определяет, по каким критериям
ESLint считает файл изменённым и требует повторного анализа.
metadata
(стратегия по умолчанию)Использует файловые метаданные, такие как:
mtime)Особенности:
mtimeПодходит для большинства локальных сценариев разработки.
contentОснована на сравнении содержимого файлов через хеширование.
Механизм работы:
Особенности:
metadata из-за необходимости чтения
файловmtime (например, при
копировании файлов)Применяется в средах, где файловые метаданные ненадёжны:
--cache-location и --cache-strategyОба параметра работают совместно и определяют разные уровни кэширования:
--cache-location отвечает за где хранится
кэш--cache-strategy отвечает за как он считается
валиднымПример комбинированного использования:
eslint src --cache \
--cache-location ./node_modules/.cache/eslint.json \
--cache-strategy content
Такое сочетание часто используется в монорепозиториях с несколькими пакетами, где важно:
Чаще используется стратегия metadata, так как:
mtimeВ CI часто:
content для надёжностиПричина — нестабильность временных меток и возможное кэширование артефактов между сборками.
Особенности:
--cache-location на пакет или
workspacecontent для точностиmetadatacontentРазница становится заметной при:
Любое изменение:
.eslintrcможет привести к полной инвалидции кэша, даже если
--cache-location остаётся тем же.
Кэш-файл не является стабильным API. Обновление ESLint может:
Если несколько процессов используют один
--cache-location:
Решение заключается в разнесении путей кэша по процессам или пакетам.
| Параметр | Основа проверки | Скорость | Точность | Типичный сценарий |
|---|---|---|---|---|
| metadata | файловые метаданные | высокая | средняя | локальная разработка |
| content | хеш содержимого | ниже | высокая | CI, сетевые FS |
--cacheПри отсутствии --cache:
--cache-location игнорируется--cache-strategy не применяетсяЭто делает оба параметра строго вспомогательными по отношению к флагу
--cache.