Continuous Integration (CI) Build Caching
Um die Build-Performance zu verbessern, speichert Next.js einen Cache in .next/cache
, der zwischen Builds geteilt wird.
Um diesen Cache in Continuous Integration (CI)-Umgebungen nutzen zu können, muss Ihr CI-Workflow so konfiguriert werden, dass der Cache zwischen Builds korrekt beibehalten wird.
Wenn Ihr CI nicht so konfiguriert ist, dass
.next/cache
zwischen Builds beibehalten wird, kann es zu einem No Cache Detected-Fehler kommen.
Hier sind einige Beispielkonfigurationen für gängige CI-Anbieter:
Vercel
Das Next.js-Caching wird automatisch für Sie konfiguriert. Es sind keine manuellen Aktionen erforderlich.
CircleCI
Bearbeiten Sie Ihren save_cache
-Schritt in .circleci/config.yml
, um .next/cache
einzubeziehen:
steps:
- save_cache:
key: dependency-cache-{{ checksum "yarn.lock" }}
paths:
- ./node_modules
- ./.next/cache
Falls Sie keinen save_cache
-Key haben, folgen Sie bitte der CircleCI-Dokumentation zum Einrichten von Build-Caching.
Travis CI
Fügen Sie Folgendes zu Ihrer .travis.yml
hinzu oder mergen Sie es ein:
cache:
directories:
- $HOME/.cache/yarn
- node_modules
- .next/cache
GitLab CI
Fügen Sie Folgendes zu Ihrer .gitlab-ci.yml
hinzu oder mergen Sie es ein:
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
- .next/cache/
Netlify CI
Verwenden Sie Netlify Plugins mit @netlify/plugin-nextjs
.
AWS CodeBuild
Fügen Sie Folgendes zu Ihrer buildspec.yml
hinzu oder mergen Sie es ein:
cache:
paths:
- 'node_modules/**/*' # `node_modules` cachen für schnelleres `yarn` oder `npm i`
- '.next/cache/**/*' # Next.js cachen für schnellere Anwendungsrebuilds
GitHub Actions
Verwenden Sie GitHub's actions/cache und fügen Sie folgenden Schritt in Ihre Workflow-Datei ein:
uses: actions/cache@v3
with:
# Siehe hier für Caching mit `yarn` https://github.com/actions/cache/blob/main/examples.md#node---yarn oder nutzen Sie Caching mit actions/setup-node https://github.com/actions/setup-node
path: |
~/.npm
${{ github.workspace }}/.next/cache
# Erzeugt einen neuen Cache bei Änderungen an Paketen oder Quellcode.
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
# Falls Quellcode geändert wurde aber Pakete nicht, wird ein vorheriger Cache verwendet.
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
Bitbucket Pipelines
Fügen Sie Folgendes auf oberster Ebene Ihrer bitbucket-pipelines.yml
hinzu oder mergen Sie es ein (gleiche Ebene wie pipelines
):
definitions:
caches:
nextcache: .next/cache
Dann referenzieren Sie es im caches
-Abschnitt Ihres Pipeline-steps
:
- step:
name: your_step_name
caches:
- node
- nextcache
Heroku
Verwenden Sie Herokus custom cache und fügen Sie ein cacheDirectories
-Array in Ihrer Top-Level package.json hinzu:
"cacheDirectories": [".next/cache"]
Azure Pipelines
Verwenden Sie Azure Pipelines' Cache task und fügen Sie folgende Task vor dem Task hinzu, der next build
ausführt:
- task: Cache@2
displayName: 'Cache .next/cache'
inputs:
key: next | $(Agent.OS) | yarn.lock
path: '$(System.DefaultWorkingDirectory)/.next/cache'