Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Configuración
La configuración de Lerna se divide en dos archivos: lerna.json y nx.json.
Lerna.json
npmClient
Es importante establecer este valor si no utilizas npm como gestor de paquetes (por ejemplo, si usas yarn o pnpm) para que Lerna pueda ajustar su lógica interna al resolver configuraciones y paquetes. Esto es especialmente relevante con pnpm, ya que utiliza un archivo separado pnpm-workspaces.yaml para definir su configuración de workspaces.
packages
Por defecto, Lerna intentará reutilizar cualquier configuración de workspaces que tengas de tu gestor de paquetes. Si prefieres especificar un subconjunto de tus paquetes disponibles para que Lerna opere sobre ellos, puedes usar la propiedad packages que indicará a Lerna dónde buscar archivos package.json.
{
"packages": ["packages/*"]
}
version
Lerna tiene dos modos de publicación de paquetes: fixed e independent. En modo fixed, todos los paquetes afectados se publicarán con la misma versión. La última versión publicada se registra en lerna.json así:
{
"version": "1.2.0"
}
En modo independent, cada paquete tiene su propia versión, y lerna.json se verá así:
{
"version": "independent"
}
Consulta la documentación de versionado y publicación para más detalles.
commands
El archivo lerna.json también puede incluir opciones para cada comando de esta forma:
{
"command": {
"version": {
"allowBranch": "main",
"conventionalCommits": true
}
}
}
Encuentra las opciones disponibles en la documentación de la API.
Nx.json
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": {
"dependsOn": ["prebuild", "^build"],
"inputs": ["prod", "^prod"],
"outputs": ["{projectRoot}/dist"],
"cache": true
},
"test": {
"inputs": ["default", "^prod", "{workspaceRoot}/jest.config.ts"],
"cache": true
}
}
}
Valores Predeterminados de Targets
Los targets son nombres de scripts npm. Puedes añadir metadatos asociados, por ejemplo, al script build de cada proyecto del repositorio en la sección targetDefaults.
cache
Cuando se establece en true, indica a Nx que almacene en caché los resultados de ejecutar el script. En la mayoría de repositorios, todas las tareas no persistentes (ej. no serve) deberían ser cacheables.
Dependencias (dependsOn)
Los targets pueden depender de otros targets. Un escenario común es construir primero las dependencias de un proyecto antes de construir el proyecto. La propiedad dependsOn define las dependencias de un target individual.
"dependsOn": [ "prebuild", "^build"] indica a Nx que cada script build requiere que se ejecute primero el script prebuild del mismo proyecto y el script build de todas sus dependencias.
Entradas y Entradas Nombradas
El array inputs indica a Nx qué factores considerar para determinar si una ejecución particular de un script debe considerarse un acierto de caché. Existen tres tipos de inputs:
Conjuntos de archivos (Filesets)
Ejemplos:
-
{projectRoot}/**.*.ts -
equivalente a
{fileset: "{projectRoot}/**/*.ts"} -
{workspaceRoot}/jest.config.ts -
equivalente a
{fileset: "{workspaceRoot}/jest.config.ts}
Entradas de tiempo de ejecución (Runtime Inputs)
Ejemplos:
{runtime: "node -v"}
Nota: el valor resultante se hashea, por lo que nunca se muestra.
Variables de entorno (Env Variables)
Ejemplos:
{env: "MY_ENV_VAR"}
Nota: el valor resultante se hashea, por lo que nunca se muestra.
Entradas Nombradas (Named Inputs)
Ejemplos:
-
inputs: ["prod"] -
equivalente a
inputs: [{input: "prod", projects: "self"}]
A menudo, el mismo patrón de glob aparece en múltiples lugares (ej. el fileset "prod" excluirá archivos de pruebas en todos los proyectos). Mantenerlos sincronizados es propenso a errores, por lo que recomendamos definir entradas nombradas que puedas referenciar en todos esos lugares.
Usando ^
Ejemplos:
-
inputs: ["^prod"] -
equivalente a
inputs: [{input: "prod", projects: "dependencies"}]
Similar a dependsOn, el símbolo "^" significa "dependencias". Esta es una idea crucial, así que ilustrémosla con un ejemplo:
"test": {
"inputs": [ "default", "^prod" ]
}
La configuración anterior significa que el objetivo "test" depende de todos los archivos fuente del proyecto actual y solo de las fuentes "prod" (no de pruebas) de sus dependencias. En otras palabras, trata los archivos de prueba como privados. Si tu proyecto remixapp depende de la biblioteca header, cambiar las pruebas de header no afectará al objetivo "test" de remixapp.
Salidas (outputs)
"outputs": ["{projectRoot}/dist"] indica a Nx dónde el script de compilación creará artefactos. Este valor es el predeterminado, así que podemos omitirlo. "outputs": [] indica que el objetivo "test" no crea artefactos en disco. Puedes listar múltiples salidas usando globs o archivos individuales.
Esta configuración generalmente no es necesaria. Nx incluye valores predeterminados razonables que implementan lo anterior.
Configuración Específica por Proyecto
En muchos espacios de trabajo con proyectos similares, nx.json contiene toda la configuración de Nx. A veces es útil tener configuraciones específicas por proyecto, ubicadas en el archivo package.json del proyecto.
{
"name": "parent",
"scripts": {
"build": "...",
"test": "..."
},
"dependencies": {...},
"nx": {
"namedInputs": {
"prod": [
"!{projectRoot}/**/*.test.tsx",
"{workspaceRoot}/configs/webpack.conf.js"
]
},
"targets": {
"build": {
"dependsOn": [
"^build"
],
"inputs": [
"prod",
"^prod"
],
"outputs": [
"{workspaceRoot}/dist/parent"
]
}
}
"implicitDependencies": ["projecta", "!projectb"]
}
}
Nota: los namedInputs y targetDefaults definidos en nx.json son solo valores predeterminados. Si copias esa configuración en el package.json de cada proyecto, el resultado será idéntico.
En otras palabras, cada proyecto tiene un conjunto de entradas nombradas definidas como: {...namedInputsFromNxJson, ...namedInputsFromProjectsPackageJson}. Las dependencias (dependsOn) de cada objetivo/script se definen como dependsOnFromProjectsPackageJson || dependsOnFromNxJson. Lo mismo aplica para inputs y outputs.
Entradas y Entradas Nombradas
Definir inputs para un objetivo reemplaza los inputs definidos para ese nombre de objetivo en nx.json. En pseudocódigo: inputs = packageJson.targets.build.inputs || nxJson.targetDefaults.build.inputs.
También puedes definir y redefinir entradas nombradas. Esto habilita casos clave como definir en nx.json (aplicable a todos los proyectos):
"test": {
"inputs": [
"default",
"^prod"
]
}
Mientras que los proyectos pueden definir su propio fileset "prod" sin redefinir los inputs para el objetivo test.
{
"name": "parent",
"scripts": {
"build": "...",
"test": "..."
},
"dependencies": {...},
"nx": {
"namedInputs": {
"prod": [
"!{projectRoot}/**/*.test.js",
"{workspacRoot}/jest.config.js"
]
}
}
}
En este caso, Nx usará el input prod correcto para cada proyecto.
Dependencias (dependsOn)
Definir dependsOn para un objetivo reemplaza el dependsOn definido para ese nombre de objetivo en nx.json. En pseudocódigo: dependsOn = packageJson.targets.build.dependsOn || nxJson.targetDefaults.build.dependsOn.
Salidas (outputs)
Definir outputs para un objetivo específico reemplazaría los outputs definidos para ese nombre de objetivo en nx.json.
Usando pseudocódigo: outputs = packageJson.targets.build.outputs || nxJson.targetDefaults.build.outputs.
Dependencias implícitas
La línea "implicitDependencies": ["projecta", "!projectb"] indica a Nx que el proyecto padre depende de projecta incluso
cuando no existe una dependencia declarada en su package.json. Nx tratará esta dependencia igual que las explícitas.
También especifica que, pese a existir una dependencia explícita en projectb, debe ignorarse.
Configuración adicional
Para formas adicionales de configurar tareas y almacenamiento en caché, consulta la documentación relevante de Nx.