Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →
Кэширование результатов задач
В вопросах выполнения задач, кэширования и т.д. Lerna и Nx взаимозаменяемы. Говоря "Lerna может кэшировать сборки", мы подразумеваем, что Lerna использует Nx, который умеет кэшировать сборки.
Постоянная пересборка и повторное тестирование одного и того же кода требует больших ресурсов. Lerna использует вычислительный кэш, чтобы никогда не пересобирать один и тот же код дважды.
Настройка
Через Nx Lerna обладает самой продвинутой и проверенной на практике системой вычислительного кэширования. Она определяет, выполнялась ли задача ранее, и может использовать кэш для восстановления результатов.
Если у вас нет файла nx.json, выполните npx lerna add-caching.
Чтобы включить кэширование для build и test, отредактируйте свойство targetDefaults в файле nx.json, добавив в него задачи build и test:
{
"targetDefaults": {
"build": {
"cache": true
},
"test": {
"cache": true
}
}
}
Важно: кэшируемые операции должны быть свободны от побочных эффектов. При одинаковых входных данных они должны давать одинаковый результат. Например, e2e-тесты, взаимодействующие с backend API, нельзя кэшировать, так как бэкенд может влиять на результат теста.
Теперь выполните команду дважды. Второй запуск будет мгновенным:
lerna run build --scope=header
> lerna run build --scope=header
> header:build [existing outputs match the cache, left as is]
> header@0.0.0 build
> rimraf dist && rollup --config
src/index.tsx → dist...
created dist in 858ms
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Lerna (powered by Nx) Successfully ran target test for project header (4ms)
Nx read the output from the cache instead of running the command for 1 out of 1 tasks.
Воспроизведение из кэша
Когда Lerna определяет неизменность входных данных задачи, она воссоздает её выходные данные так, будто задача реально выполнилась на вашей машине — но гораздо быстрее. Кэшированные выходные данные включают как вывод в терминал, так и файлы в указанных output-директориях.
Проверить это можно, удалив папку dist (результат задачи header:build) и повторно выполнив lerna run build --scope=header. Кэшированная задача воспроизведётся мгновенно, а файлы снова появятся в dist.
header/
└── dist/ <-- this folder gets recreated
Если ваша задача создаёт артефакты в другом месте, вы можете изменить кэшируемые папки. Также можно настроить параметры, при изменении которых кэш будет инвалидирован.
Продвинутое кэширование
Для глубокого понимания работы кэширования и тонкой настройки под ваш проект читайте Как работает кэширование.