Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Cómo funciona el almacenamiento en caché
Antes de ejecutar cualquier tarea, Lerna calcula su hash de computación. Mientras este hash sea idéntico, el resultado de ejecutar la tarea será el mismo.
Por defecto, el hash de computación para un comando como lerna run test --scope=remixapp incluye:
-
Todos los archivos fuente de
remixappy sus dependencias -
Configuración global relevante
-
Versiones de dependencias externas
-
Valores de entorno proporcionados por el usuario, como la versión de Node
-
Flags de comandos CLI

Este comportamiento es configurable. Por ejemplo, las verificaciones de lint podrían depender solo del código fuente del proyecto y configuraciones globales. Las compilaciones pueden depender de archivos dts de las librerías compiladas en lugar de su código fuente.
Tras calcular el hash para una tarea, Lerna verifica si ya ejecutó previamente esta computación exacta. Primero busca localmente, y si no la encuentra y hay caché remoto configurado, busca remotamente.
Si Lerna encuentra la computación, la recupera y la reproduce. Coloca los archivos correctos en las carpetas adecuadas e imprime la salida de terminal. Desde la perspectiva del usuario, el comando se ejecutó igual pero mucho más rápido.

Si Lerna no encuentra un hash de computación correspondiente, ejecuta la tarea y, tras completarla, guarda las salidas y los registros de terminal localmente (y remotamente si está configurado). Todo esto ocurre de forma transparente.
Aunque conceptualmente es sencillo, Lerna optimiza esta experiencia para el usuario. Por ejemplo:
-
Captura stdout y stderr para garantizar que la salida reproducida sea idéntica, incluso en Windows.
-
Minimiza operaciones de I/O recordando qué archivos se reproducen y dónde.
-
Muestra solo la salida relevante al procesar grandes grafos de tareas.
-
Ofrece herramientas para diagnosticar fallos de caché entre otras optimizaciones.
Cuando tu espacio de trabajo crece, el grafo de tareas se asemeja más a esto:

Estas optimizaciones son cruciales para que Lerna sea utilizable en espacios de trabajo complejos. Solo se realiza el trabajo mínimo necesario; el resto se mantiene como está o se restaura desde caché.
Entradas del hash de código fuente
El resultado de compilar o probar una aplicación o librería depende de su código fuente y de todos los códigos fuente de las librerías que dependa (directa o indirectamente).
Por defecto, Lerna es conservador. Al ejecutar lerna run test --scope=remixapp, considera todos los archivos en el directorio remixapp y en header y footer (sus dependencias). Esto causaría fallos de caché innecesarios. Por ejemplo, cambiar un archivo de specs en footer no afecta los resultados de pruebas en remixapp.
Podemos definir una configuración más precisa:
NOTA: "{projectRoot}" y "{workspaceRoot}" son sintaxis especiales soportadas por el ejecutor de tareas, que se interpolarán internamente al ejecutar el comando. No debes reemplazar "{projectRoot}" o "{workspaceRoot}" con rutas fijas ya que esto reduce la flexibilidad de tu configuración.
{
"namedInputs": {
"default": ["{projectRoot}/**/*"],
"prod": ["!{projectRoot}/**/*.spec.tsx"]
},
"targetDefaults": {
"build": {
"inputs": ["prod", "^prod"]
},
"test": {
"inputs": ["default", "^prod", "{workspaceRoot}/jest.config.ts"]
}
}
}
Con esta configuración, el script de construcción solo considerará los archivos no de prueba de remixapp, header y footer. El script de pruebas considerará todos los archivos fuente del proyecto bajo prueba y solo los archivos no de prueba de sus dependencias. El script de pruebas también considerará el archivo de configuración de jest en la raíz del espacio de trabajo.
Entradas de hash en tiempo de ejecución
Tus objetivos también pueden depender de valores en tiempo de ejecución.
{
"targetDefaults": {
"build": {
"inputs": [{ "env": "MY_ENV_NAME" }, { "runtime": "node -v" }]
}
}
}
Entradas de hash de argumentos
Finalmente, además de las entradas de hash de código fuente y entradas de hash en tiempo de ejecución, Lerna necesita considerar los argumentos: Por ejemplo, lerna run build --scope=remixapp y lerna run build --scope=remixapp -- --flag=true producen resultados diferentes.
Nota: solo las banderas pasadas a los scripts npm afectan los resultados del cálculo. Por ejemplo, los siguientes comandos son idénticos desde la perspectiva del caché.
npx lerna run build --scope=remixapp
npx lerna run build --ignore=header,footer
En otras palabras, Lerna no almacena en caché lo que el desarrollador escribe en la terminal.
Si construyes/pruebas/linteas... múltiples proyectos, cada construcción individual tiene su propio valor hash y se recuperará del caché o se ejecutará. Esto significa que desde el punto de vista del caché, el siguiente comando:
npx lerna run build --scope=header,footer
es idéntico a estos dos comandos:
npx lerna run build --scope=header
npx lerna run build --scope=footer
Qué se almacena en caché
Lerna funciona a nivel de proceso. Independientemente de las herramientas utilizadas para construir/probar/lintear/etc. tu proyecto, los resultados se almacenan en caché.
Lerna configura hooks para capturar stdout/stderr antes de ejecutar el comando. Toda la salida se almacena en caché y luego se reproduce durante un acierto de caché.
Lerna también almacena en caché los archivos generados por un comando. La lista de archivos/carpetas se especifica en la propiedad outputs del package.json del proyecto:
NOTA: "{projectRoot}" y "{workspaceRoot}" son sintaxis especiales soportadas por el ejecutor de tareas, que se interpolarán internamente al ejecutar el comando. No debes reemplazar "{projectRoot}" o "{workspaceRoot}" con rutas fijas ya que esto reduce la flexibilidad de tu configuración.
{
"nx": {
"targets": {
"build": {
"outputs": ["{projectRoot}/build", "{projectRoot}/public/build"]
}
}
}
}
Si la propiedad outputs para un objetivo dado no está definida en el archivo package.json del proyecto, Lerna buscará en la sección targetDefaults del nx.json:
{
...
"targetDefaults": {
"build": {
"dependsOn": [
"^build"
],
"outputs": [
"{projectRoot}/dist",
"{projectRoot}/build",
"{projectRoot}/public/build"
]
}
}
}
Si ninguna está definida, Lerna por defecto almacena en caché dist y build en la raíz del repositorio.
Omitir el caché
A veces querrás omitir el caché. Si, por ejemplo, estás midiendo el rendimiento de un comando, puedes usar la bandera --skip-nx-cache para omitir la verificación del caché de computación.
npx lerna run build --skip-nx-cache
npx lerna run test --skip-nx-cache
Configuración adicional
Para formas adicionales de configurar tareas y almacenamiento en caché, consulta la documentación relevante de Nx.