Кэширование задач
Vite Task может автоматически отслеживать зависимости и кэшировать задачи, запускаемые через vp run.
Обзор
Когда задача успешно завершается (код выхода 0), её вывод в терминал (stdout/stderr) сохраняется. При следующем запуске Vite Task проверяет, изменилось ли что-либо из следующего:
- Аргументы: изменились ли дополнительные аргументы, переданные задаче?
- Переменные окружения: изменились ли какие-либо отслеживаемые переменные окружения?
- Входные файлы: изменился ли какой-либо файл, который читает команда?
Если всё совпадает, кэшированный вывод мгновенно воспроизводится, а сама команда не запускается.
ИНФОРМАЦИЯ
По умолчанию кэшируется и воспроизводится только вывод терминала. Чтобы кэшировать файлы, создаваемые задачей, настройте шаблоны output. Соответствующие файлы архивируются после успешного выполнения задачи и восстанавливаются при попадании в кэш.
tasks: {
build: {
command: 'vp build',
output: ['dist/**'],
},
}Когда происходит промах кэша, Vite Task точно сообщает причину:
$ vp lint ✗ cache miss: 'src/utils.ts' modified, executing
$ vp build ✗ cache miss: env changed, executing
$ vp test ✗ cache miss: args changed, executingКогда включено кэширование?
Команда, запускаемая через vp run, может быть либо задачей, определённой в vite.config.ts, либо скриптом, определённым в package.json. Имена задач и скриптов не могут пересекаться. По умолчанию задачи кэшируются, а скрипты — нет.
Существует три уровня управления кэшированием задач в следующем порядке:
1. cache: false для отдельной задачи
Задача может установить cache: false, чтобы отказаться от кэширования. Это нельзя переопределить никакими другими флагами управления кэшем.
2. Флаги CLI
--no-cache отключает кэширование для всего. --cache включает кэширование как для задач, так и для скриптов, что эквивалентно установке run.cache: true для данного запуска.
3. Конфигурация рабочего пространства
Параметр run.cache в корневом vite.config.ts задаёт поведение по умолчанию для каждой категории:
| Параметр | По умолчанию | Эффект |
|---|---|---|
cache.tasks | true | Кэшировать задачи, определённые в vite.config.ts |
cache.scripts | false | Кэшировать скрипты из package.json |
Автоматическое отслеживание файлов
Vite Task отслеживает, какие файлы читает каждая команда во время выполнения. Когда задача запускается, система фиксирует, какие файлы открывает процесс, например исходные файлы .ts, vite.config.ts и package.json, и сохраняет хеши их содержимого. При следующем запуске эти хеши проверяются повторно, чтобы определить, изменилось ли что-либо.
Это означает, что кэширование работает «из коробки» для большинства команд без какой-либо дополнительной настройки. Vite Task также отслеживает:
- Отсутствующие файлы: если команда проверяет наличие файла, которого не существует, например
utils.tsво время разрешения модулей, последующее создание этого файла корректно приводит к инвалидизации кэша. - Содержимое каталогов: если команда сканирует каталог, например когда тестовый раннер ищет файлы
*.test.ts, добавление или удаление файлов в этом каталоге приводит к инвалидизации кэша.
Как избежать слишком широкого отслеживания входных данных
Автоматическое отслеживание иногда может включать больше файлов, чем необходимо, что приводит к лишним промахам кэша:
- Файлы кэша инструментов: некоторые инструменты поддерживают собственный кэш, например
.tsbuildinfoу TypeScript или каталогtarget/у Cargo. Эти файлы могут изменяться между запусками даже без изменений в исходном коде, что приводит к ненужной инвалидизации кэша. - Содержимое каталогов: когда команда сканирует каталог, например используя шаблон
**/*.js, Vite Task видит чтение каталога, но не сам шаблон поиска. В результате добавление или удаление любого файла в этом каталоге, даже не связанного с задачей, приводит к инвалидизации кэша.
Используйте параметр input, чтобы исключить файлы из отслеживания или заменить автоматическое отслеживание явными шаблонами файлов:
tasks: {
build: {
command: 'tsc',
input: [{ auto: true }, '!**/*.tsbuildinfo'],
},
}Переменные окружения
По умолчанию задачи запускаются в чистом окружении. Передаётся только небольшой набор распространённых переменных, таких как PATH, HOME и CI. Остальные переменные окружения недоступны задаче и не включаются в отпечаток кэша.
Чтобы добавить переменную окружения в ключ кэша, укажите её в параметре env. При изменении её значения кэш будет инвалидирован:
tasks: {
build: {
command: 'webpack --mode production',
env: ['NODE_ENV'],
},
}Чтобы передать переменную задаче без влияния на поведение кэша, используйте параметр untrackedEnv. Это полезно для таких переменных, как CI или GITHUB_ACTIONS, которые должны быть доступны задаче, но обычно не влияют на кэширование.
Подробную информацию о шаблонах с подстановочными знаками и полный список автоматически передаваемых переменных см. в разделе Конфигурация Run.
Совместное использование кэша
Кэш Vite Task основан на содержимом. Если две задачи запускают одну и ту же команду с одинаковыми входными данными, они используют одну и ту же запись кэша. Это происходит автоматически, когда несколько задач включают общий шаг — либо как отдельные задачи, либо как части составных команд:
{
"scripts": {
"check": "vp lint && vp build",
"release": "vp lint && deploy-script"
}
}При включённом кэшировании, например через --cache или run.cache.scripts: true, запуск check перед release означает, что шаг vp lint в release мгновенно получит попадание в кэш, поскольку в обоих случаях выполняется одна и та же команда над одними и теми же файлами.
Команды управления кэшем
Используйте vp cache clean, когда необходимо очистить кэшированные результаты задач:
vp cache cleanКэш задач хранится в каталоге node_modules/.vite/task-cache в корне проекта. Команда vp cache clean удаляет этот каталог кэша.