Saltar al contenido principal
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Solución de problemas

Este documento contiene soluciones para problemas específicos que nuestros usuarios han encontrado al usar Lerna.

Comando import

Problemas de buffer durante la importación

Al intentar importar un repositorio con muchos commits, existe la posibilidad de encontrar errores como:

DeprecationWarning: Unhandled promise rejections are deprecated

o

Error: spawnSync /bin/sh ENOBUFS during ImportCommand.execute

Solución:

Ejecuta lerna import con el flag --max-buffer y especifica un número suficientemente grande (en bytes). Al momento de escribir esto, el valor predeterminado es 10MB, tenlo en cuenta.

No se pueden importar commits con conflictos de fusión

Al importar un repositorio que contiene commits de fusión que requirieron resolución de conflictos, el comando falla con un error:

lerna ERR! execute Error: Command failed: git am -3
lerna ERR! execute error: Failed to merge in the changes.
lerna ERR! execute CONFLICT (content): Merge conflict in [file]

Solución

Ejecuta lerna import con el flag --flatten para importar el historial en modo "plano", es decir, representando cada commit de fusión como un único cambio introducido.

Fallo cuando el árbol de Git tiene cambios sin commit

Recibirás el error fatal: ambiguous argument 'HEAD': cuando el proyecto actual tenga cambios sin commit.

Solución

Asegúrate de hacer commit de todos los cambios en tu proyecto Lerna antes de importar paquetes con lerna import.

Comando publish

Publicación no detecta etiquetas manuales en modo fijo con GitHub/GitHub Enterprise

GitHub y GitHub Enterprise usan etiquetas ligeras (lightweight tags) cuando se crea un release mediante la interfaz web, mientras que Lerna utiliza etiquetas anotadas (annotated tags).

Esto puede causar que Lerna ignore releases publicados manualmente que fueron etiquetados mediante la interfaz web de GitHub.

Por ejemplo, si el historial de publicaciones fue:

  • v1.1.0 publicado y etiquetado con lerna publish

  • v1.2.0 publicado manualmente y etiquetado mediante la interfaz web de GitHub

  • v1.2.1 publicado manualmente y etiquetado mediante la interfaz web de GitHub

Al ejecutar lerna publish ahora, detectaría v1.1.0 en lugar de v1.2.1 como última etiqueta publicada.

Las implicaciones dependen de tu uso de lerna publish:

  • El mensaje de publicación usaría v1.1.0 como base para sugerencias de major/minor/patch.

  • Al usar el flag --conventional-commits:

    • Sugeriría un incremento semver basado en todos los commits desde v1.1.0 (incluyendo commits de v1.2.0, v1.2.1, etc.)
    • Los archivos CHANGELOG.md generados repetirían commits ya publicados en v1.2.0, v1.2.1, etc.

Solución:

Siempre que sea posible, usa lerna publish en lugar de publicaciones manuales.

Para nuevas publicaciones manuales, usa git tag -a -m <version> en lugar de la interfaz web de GitHub.

Para etiquetas ligeras existentes, pueden convertirse a etiquetas anotadas con:

GIT_AUTHOR_NAME="$(git show $1 --format=%aN -s)"
GIT_AUTHOR_EMAIL="$(git show $1 --format=%aE -s)"
GIT_AUTHOR_DATE="$(git show $1 --format=%aD -s)"
GIT_COMMITTER_NAME="$(git show $1 --format=%cN -s)"
GIT_COMMITTER_EMAIL="$(git show $1 --format=%cE -s)"
GIT_COMMITTER_DATE="$(git show $1 --format=%cD -s)"

git tag -a -m $1 -f $1 $1

git push --tags --force

Consulta esta publicación de Stackoverflow para más detalles.

Publicación en registros npm privados (Artifactory, npm Enterprise, etc.)

Si lerna publish falla, verifica que tengas lo siguiente en tu package.json:

	"publishConfig": {
"registry": "https://[registry-url]"
}

También es posible que necesites agregar lo siguiente a tu archivo .npmrc en los paquetes individuales:

registry = https://[registry-url]
información

Lerna siempre utiliza las herramientas de npm para publicar paquetes, independientemente del npmClient configurado en el archivo lerna.json. Esto significa que cualquier configuración de yarn o pnpm no será detectada. Para garantizar una publicación exitosa en un registro privado, asegúrate de que npm esté configurado correctamente con variables de entorno o un archivo .npmrc.

Depuración con Jest / Visual Studio Code

Es posible depurar pruebas de Jest en paquetes gestionados por Lerna usando Visual Studio Code. La depuración con puntos de interrupción funciona con la siguiente configuración en el archivo <root>/.vscode/launch.json del monorepo. Este ejemplo ejecuta Jest para un paquete específico my-package dentro del monorepo:

{
"name": "Jest my-package",
"type": "node",
"request": "launch",
"address": "localhost",
"protocol": "inspector",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/lerna",
"runtimeArgs": [
"exec",
"--scope",
"my-package",
"--",
"node"
],
"args": [
"${workspaceRoot}/node_modules/jest/bin/jest.js",
"--runInBand",
"--no-cache",
"packages/my-package"
]
}

Probado con Visual Studio Code v1.19.3 y Jest v22.1.4.