Кэширование сборок в непрерывной интеграции (CI)
Для повышения производительности сборки Next.js сохраняет кэш в .next/cache
, который используется между разными сборками.
Чтобы использовать этот кэш в средах непрерывной интеграции (CI), ваш CI-процесс должен быть настроен для правильного сохранения кэша между сборками.
Если ваш CI не настроен на сохранение
.next/cache
между сборками, вы можете увидеть ошибку No Cache Detected.
Ниже приведены примеры конфигураций кэширования для распространённых CI-провайдеров:
Vercel
Кэширование Next.js настраивается автоматически. Дополнительные действия не требуются.
CircleCI
Измените шаг save_cache
в .circleci/config.yml
, включив .next/cache
:
steps:
- save_cache:
key: dependency-cache-{{ checksum "yarn.lock" }}
paths:
- ./node_modules
- ./.next/cache
Если у вас нет ключа save_cache
, следуйте документации CircleCI по настройке кэширования сборок.
Travis CI
Добавьте или объедините следующее в ваш .travis.yml
:
cache:
directories:
- $HOME/.cache/yarn
- node_modules
- .next/cache
GitLab CI
Добавьте или объедините следующее в ваш .gitlab-ci.yml
:
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
- .next/cache/
Netlify CI
Используйте Netlify Plugins с @netlify/plugin-nextjs
.
AWS CodeBuild
Добавьте (или объедините) следующее в ваш buildspec.yml
:
cache:
paths:
- 'node_modules/**/*' # Кэшировать `node_modules` для ускорения `yarn` или `npm i`
- '.next/cache/**/*' # Кэшировать Next.js для ускорения пересборки приложения
GitHub Actions
Используя actions/cache от GitHub, добавьте следующий шаг в ваш workflow-файл:
uses: actions/cache@v3
with:
# См. примеры кэширования для `yarn` https://github.com/actions/cache/blob/main/examples.md#node---yarn или используйте кэширование через actions/setup-node https://github.com/actions/setup-node
path: |
~/.npm
${{ github.workspace }}/.next/cache
# Генерировать новый кэш при изменении пакетов или исходных файлов
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
# Если исходные файлы изменились, но пакеты нет, пересобирать из предыдущего кэша
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
Bitbucket Pipelines
Добавьте или объедините следующее в ваш bitbucket-pipelines.yml
на верхнем уровне (на том же уровне, что и pipelines
):
definitions:
caches:
nextcache: .next/cache
Затем укажите его в разделе caches
шага вашего пайплайна:
- step:
name: your_step_name
caches:
- node
- nextcache
Heroku
Используя custom cache от Heroku, добавьте массив cacheDirectories
в ваш корневой package.json:
"cacheDirectories": [".next/cache"]
Azure Pipelines
Используя Cache task от Azure Pipelines, добавьте следующую задачу в ваш pipeline-файл где-то перед задачей, выполняющей next build
:
- task: Cache@2
displayName: 'Кэширование .next/cache'
inputs:
key: next | $(Agent.OS) | yarn.lock
path: '$(System.DefaultWorkingDirectory)/.next/cache'