Кэширование задач
Vite Task может автоматически отслеживать зависимости и кэшировать задачи, запускаемые через vp run.
Обзор
Если задача завершается успешно (с кодом выхода 0), сохраняются её вывод в терминал (stdout/stderr) и все созданные файлы (выходные файлы). При следующем запуске Vite Task проверяет, изменилось ли что-либо:
- Аргументы: изменились ли дополнительные аргументы, переданные задаче?
- Переменные окружения: изменились ли какие-либо отслеживаемые переменные окружения?
- Входные данные: изменился ли какой-либо входной файл, который читает команда?
Если все проверки успешно пройдены, Vite Task воспроизводит сохранённый вывод в терминал, восстанавливает сохранённые выходные файлы и пропускает выполнение команды.
Когда происходит промах кэша, Vite Task точно сообщает причину:
$ vp lint ✗ cache miss: 'src/utils.ts' modified, executing
$ vp build ✗ cache miss: env 'VITE_GREETING' 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 использует автоматическое отслеживание данных, чтобы определить, какие данные необходимы каждой задаче для кэширования, поэтому вам не нужно настраивать это вручную. Автоматическое отслеживание данных имеет два уровня:
- Отслеживание файловой системы: Vite Task сохраняет информацию о чтении файлов, проверках отсутствующих файлов, содержимом списков каталогов и созданных выходных файлах для каждой задачи с включённым кэшированием.
- Кооперативное отслеживание: инструменты, предоставляющие данные для кэша, могут передавать метаданные, которые невозможно определить только с помощью отслеживания файловой системы. В настоящее время Vite+ поддерживает это для
vp build.
Используйте input или output, если для задачи нужны ручные правила отслеживания. input определяет, какие изменения инвалидируют кэш. output определяет, какие файлы Vite Task восстанавливает при попадании в кэш.
tasks: {
build: {
command: 'node build.mjs',
input: [{ auto: true }, '!dist/**'],
output: ['dist/**'],
},
}Переменные окружения
По умолчанию задачи запускаются в чистом окружении. Передаётся только небольшой набор распространённых переменных, таких как 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 удаляет этот каталог кэша.