Almacenamiento en caché para Integración Continua (CI)
Para mejorar el rendimiento de las compilaciones, Next.js guarda una caché en .next/cache
que se comparte entre compilaciones.
Para aprovechar esta caché en entornos de Integración Continua (CI), su flujo de trabajo de CI deberá configurarse para persistir correctamente la caché entre compilaciones.
Si su CI no está configurado para persistir
.next/cache
entre compilaciones, puede que vea un error de No se detectó caché.
Aquí hay algunas configuraciones de ejemplo para proveedores comunes de CI:
Vercel
El almacenamiento en caché de Next.js se configura automáticamente. No es necesario realizar ninguna acción.
CircleCI
Edite su paso save_cache
en .circleci/config.yml
para incluir .next/cache
:
steps:
- save_cache:
key: dependency-cache-{{ checksum "yarn.lock" }}
paths:
- ./node_modules
- ./.next/cache
Si no tiene una clave save_cache
, siga la documentación de CircleCI sobre configuración de caché.
Travis CI
Agregue o combine lo siguiente en su .travis.yml
:
cache:
directories:
- $HOME/.cache/yarn
- node_modules
- .next/cache
GitLab CI
Agregue o combine lo siguiente en su .gitlab-ci.yml
:
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
- .next/cache/
Netlify CI
Use Plugins de Netlify con @netlify/plugin-nextjs
.
AWS CodeBuild
Agregue (o combine) lo siguiente a su buildspec.yml
:
cache:
paths:
- 'node_modules/**/*' # Almacenar `node_modules` para `yarn` o `npm i` más rápido
- '.next/cache/**/*' # Almacenar Next.js para reconstrucciones más rápidas
GitHub Actions
Usando actions/cache de GitHub, agregue el siguiente paso en su archivo de flujo de trabajo:
uses: actions/cache@v4
with:
# Para almacenamiento con `yarn` ver https://github.com/actions/cache/blob/main/examples.md#node---yarn o puede usar actions/setup-node
path: |
~/.npm
${{ github.workspace }}/.next/cache
# Generar nueva caché cuando cambian paquetes o archivos fuente
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
# Si cambian archivos fuente pero no paquetes, reconstruir desde caché previa
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
Bitbucket Pipelines
Agregue o combine lo siguiente en su bitbucket-pipelines.yml
al nivel superior (mismo nivel que pipelines
):
definitions:
caches:
nextcache: .next/cache
Luego refiérase en la sección caches
del step
de su pipeline:
- step:
name: your_step_name
caches:
- node
- nextcache
Heroku
Usando el almacenamiento personalizado de Heroku, agregue un arreglo cacheDirectories
en su package.json:
"cacheDirectories": [".next/cache"]
Azure Pipelines
Usando la tarea Cache de Azure Pipelines, agregue la siguiente tarea a su archivo yaml antes de la tarea que ejecuta next build
:
- task: Cache@2
displayName: 'Cache .next/cache'
inputs:
key: next | $(Agent.OS) | yarn.lock
path: '$(System.DefaultWorkingDirectory)/.next/cache'
Jenkins (Pipeline)
Usando el plugin Job Cacher de Jenkins, agregue el siguiente paso de compilación a su Jenkinsfile
donde normalmente ejecutaría next build
o npm install
:
stage("Restore npm packages") {
steps {
// Escribe archivo de bloqueo basado en hash GIT_COMMIT
writeFile file: "next-lock.cache", text: "$GIT_COMMIT"
cache(caches: [
arbitraryFileCache(
path: "node_modules",
includes: "**/*",
cacheValidityDecidingFile: "package-lock.json"
)
]) {
sh "npm install"
}
}
}
stage("Build") {
steps {
// Escribe archivo de bloqueo basado en hash GIT_COMMIT
writeFile file: "next-lock.cache", text: "$GIT_COMMIT"
cache(caches: [
arbitraryFileCache(
path: ".next/cache",
includes: "**/*",
cacheValidityDecidingFile: "next-lock.cache"
)
]) {
// equivalente a `next build`
sh "npm run build"
}
}
}