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 →

Gestión de paquetes heredada

nota

En lerna v9, lanzada en septiembre de 2025, los comandos lerna bootstrap, lerna add y lerna link finalmente se eliminaron por completo después de más de 2 años de estar obsoletos. Si aún usas estos comandos, migra a la función workspaces de tu gestor de paquetes, que lleva mucho tiempo soportada.

La siguiente guía proporcionará contexto y te ayudará a entender por qué y cómo migrar.

En junio de 2023, con lerna v7.0.0, eliminamos por defecto los comandos lerna bootstrap, lerna add y lerna link. Más de dos años después, en lerna v9.0.0, estos comandos finalmente se eliminaron por completo.

Esta sección explica cómo migrar su configuración y modernizarla utilizando workspaces de su gestor de paquetes. Para conocer el contexto completo de por qué es necesario, consulte Antecedentes a continuación.

El cambio mental importante es reconocer que lerna no es responsable de instalar y enlazar las dependencias en su repositorio; su gestor de paquetes está mucho mejor preparado para esa tarea.

La forma de lograr esto es utilizando la función workspaces de su gestor de paquetes. Consulte su documentación respectiva aquí:

Al utilizar workspaces, su gestor de paquetes realizará el mismo enlace exacto que lerna bootstrap y lerna link hacían por usted antes, con la diferencia de que ahora está integrado directamente en el comando install. No son necesarios comandos adicionales después de ejecutar una instalación (siempre que tenga workspaces configurado según la documentación de su gestor de paquetes).

Lo mismo ocurre con reemplazar lerna add. Agregar y eliminar dependencias es algo que su gestor de paquetes ya hace por usted, y debido a que workspaces es un caso de uso de primera clase, puede ejecutar un comando install apropiado para agregar una dependencia a un paquete/espacio de trabajo específico y, nuevamente, todo el enlace local relevante se llevará a cabo automáticamente.

Consulte a continuación para ver comparaciones más concretas y ejemplos de uso antes y después.

¿Qué hace?

lerna bootstrap se usaba en lugar de npm install (o yarn/pnpm). Instalaba todos los paquetes externos y enlazaba todos los paquetes internos dentro del espacio de trabajo. lerna link solo realizaba el paso de enlace interno de esta operación.

¿Dónde se encontraría?

Lo más probable es que esté en la propiedad "scripts" de package.json en la raíz de su espacio de trabajo. También revise sus pipelines de CI, ya que podrían estar llamando a lerna bootstrap en lugar de npm install (o yarn/pnpm).

¿Con qué lo reemplazo?

Reemplace lerna bootstrap con npm install (o yarn/pnpm). Si ya está ejecutando el comando de instalación de su gestor de paquetes en algún lugar de su flujo de trabajo antes de donde llamaba a lerna bootstrap, entonces puede simplemente eliminarlo. lerna link se puede eliminar directamente, ya que el paso de enlace ahora lo maneja su gestor de paquetes durante npm install.

información

Si usa yarn y depende del enlace de binarios, es posible que deba eliminar su carpeta node_modules una vez después de cambiar a workspaces. Para más detalles, consulte este issue de yarn.

Reemplazo del uso de lerna add

¿Qué hace?

lerna add se usaba para agregar una dependencia a paquetes en el espacio de trabajo. Actualizaba los archivos package.json de cada paquete para agregar la dependencia.

¿Dónde se encontraría?

Aunque generalmente se llamaba manualmente, lerna add podría encontrarse en algunos scripts en package.json en la raíz de su espacio de trabajo.

¿Con qué lo reemplazo?

lerna add puede reemplazarse principalmente con variaciones de npm install (o yarn/pnpm). El caso de uso más común para lerna add era agregar una única dependencia a un paquete específico dentro del workspace. Este comando luce así:

lerna add <dependency> --scope <package>

y puede reemplazarse directamente con:

npm install <dependency> -w <package>

La bandera -w le indica a npm que instale la dependencia únicamente en el paquete del workspace especificado por <package>, similar a la opción --scope de Lerna.

Si necesitas agregar una dependencia a múltiples paquetes, puedes usar la opción -w varias veces:

npm install <dependency> -w <package1> -w <package2>

Hoisting Personalizado

Una ventaja del comando heredado bootstrap de lerna era el control que ofrecía sobre el hoisting de dependencias, permitiendo elevarlas a la raíz del repositorio o mantenerlas en ubicaciones anidadas.

Por lo tanto, podrías preocuparte al migrar de lerna bootstrap si tienes una configuración muy personalizada en términos de hoisting de paquetes.

En nuestra experiencia probando varios gestores de paquetes, hemos encontrado que yarn moderno (v3 y posteriores) ofrece la mayor flexibilidad en controles de hoisting:

https://yarnpkg.com/configuration/yarnrc/#nmHoistingLimits

Aún no hemos encontrado un repositorio con lerna bootstrap, sin importar su complejidad de hoisting, que no pueda migrarse a yarn moderno. Recomendamos probarlo si este es tu caso.

Si usabas lerna bootstrap sin preocupaciones avanzadas de hoisting, puedes elegir cualquier gestor de paquetes; todos ofrecen implementaciones robustas de workspaces.

Polyfill temporal para comandos heredados

Si realmente te encontrabas bloqueado y necesitabas los comandos heredados de gestión de paquetes (lerna bootstrap, lerna add y lerna link) en las versiones 7 u 8, podías instalar el paquete @lerna/legacy-package-management en la misma versión que tu paquete lerna, lo cual actuaba como polyfill implementando los comandos con su funcionalidad original.

Es importante destacar que esto fue solo una solución temporal y que el paquete entró inmediatamente en modo de solo mantenimiento: no se consideraron nuevas funciones para las preocupaciones de gestión de paquetes heredadas (como lerna bootstrap, lerna add y lerna link), aunque sí fusionamos parches críticos y actualizaciones de seguridad.

Todo soporte para @lerna/legacy-package-management se eliminó en v9, más de 2 años después de su introducción como polyfill temporal, dando a los equipos un amplio margen para migrar.

Antecedentes

Lerna fue la herramienta original para monorepos/workspaces en el ecosistema JavaScript. Cuando se creó en 2015/2016, el ecosistema era totalmente diferente y no existían capacidades nativas para manejar múltiples paquetes en un único repositorio (un "workspace"). Comandos como lerna bootstrap, lerna add y lerna link eran componentes críticos de Lerna porque no había alternativas.

Sin embargo, el hecho es que -desde hace muchos, muchos años- los gestores de paquetes que conocemos (npm, yarn y pnpm) admiten completamente el concepto de workspaces como caso de uso de primera clase.

Tienen implementaciones probadas en producción para agregar, eliminar y vincular paquetes locales, combinándolos con dependencias externas de manera natural.

Por esta razón, durante los últimos años de su período como mantenedor principal de Lerna, Daniel animó a los usuarios a reconsiderar el uso de comandos heredados y aprovechar su gestor de paquetes para estas tareas.

Aunque conocíamos este contexto de lejos, como nuevos administradores del proyecto en 2022 no quisimos entrar de lleno eliminando funcionalidades sin antes tomarnos tiempo para familiarizarnos de cerca con la realidad. Ahora que llevamos un tiempo manteniendo activamente, estamos completamente de acuerdo con Daniel y otros colaboradores en que los comandos heredados de gestión de paquetes en Lerna necesitaban retirarse.

Al eliminar estos elementos heredados que tienen alternativas nativas mejores en los gestores de paquetes, nosotros y el resto de la comunidad de lerna ahora podemos concentrar nuestros esfuerzos en lo más valioso de lerna (como, entre otros, el versionado y publicación), ¡y llevarlos a su máximo potencial!

información

Este mismo contexto se trata en la discusión de Lerna v7. Si tienes inquietudes específicas, ¡únete al debate allí y comparte toda la información que puedas!