Перейти к основному содержимому
Неофициальный Бета-перевод

Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →

Кэширование результатов задач

В вопросах выполнения задач, кэширования и т.д. Lerna и Nx взаимозаменяемы. Говоря "Lerna может кэшировать сборки", мы подразумеваем, что Lerna использует Nx, который умеет кэшировать сборки.

Постоянная пересборка и повторное тестирование одного и того же кода требует больших ресурсов. Lerna использует вычислительный кэш, чтобы никогда не пересобирать один и тот же код дважды.

Настройка

Через Nx Lerna обладает самой продвинутой и проверенной на практике системой вычислительного кэширования. Она определяет, выполнялась ли задача ранее, и может использовать кэш для восстановления результатов.

совет

Если у вас нет файла nx.json, выполните npx lerna add-caching.

Чтобы включить кэширование для build и test, отредактируйте свойство targetDefaults в файле nx.json, добавив в него задачи build и test:

nx.json
{
"targetDefaults": {
"build": {
"cache": true
},
"test": {
"cache": true
}
}
}
информация

Важно: кэшируемые операции должны быть свободны от побочных эффектов. При одинаковых входных данных они должны давать одинаковый результат. Например, e2e-тесты, взаимодействующие с backend API, нельзя кэшировать, так как бэкенд может влиять на результат теста.

Теперь выполните команду дважды. Второй запуск будет мгновенным:

lerna run build --scope=header
Terminal Output
> 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

Если ваша задача создаёт артефакты в другом месте, вы можете изменить кэшируемые папки. Также можно настроить параметры, при изменении которых кэш будет инвалидирован.

Продвинутое кэширование

Для глубокого понимания работы кэширования и тонкой настройки под ваш проект читайте Как работает кэширование.

Локальное вычислительное кэширование

По умолчанию Lerna (через Nx) использует локальный вычислительный кэш. Nx хранит закэшированные значения только неделю, после чего удаляет их. Для очистки кэша выполните nx reset — Nx создаст новый при следующем обращении.