¿Qué es Lerna?

26 de julio de 2023

Qué es Lerna

La investigación corre a cargo de Marielle

Hoy en día, los proyectos JavaScript están por todas partes: en el backend, en el frontend, en el escritorio, en el móvil, ¡y mucho más! Pero aquí está la salsa secreta: si su proyecto implica múltiples repositorios de JavaScript, es el momento de subir de nivel mediante la fusión de ellos en la misma versión de un repositorio único / mono y tomar el control con Lerna.

¿Por qué? Porque compartir código es el turbo que acelera el desarrollo. Y cuando se trata de trabajar en equipo y colaborar, no hay nada mejor que el poder de un monorrepo, sobre todo si se cuenta con las herramientas adecuadas.

¿Qué es exactamente Lerna?

Lerna es el original herramienta monorepo para TypeScript/JavaScript.

Lerna es un sistema de compilación vanguardista y eficiente diseñado para gestionar y publicar múltiples paquetes JavaScript/TypeScript desde un único repositorio. Permite a los desarrolladores dividir grandes bases de código en paquetes desplegables de forma independiente. Desde la gestión de dependencias y la vinculación de paquetes hasta las pruebas exhaustivas y la publicación transparente en el registro NPM, Lerna agiliza cada paso del proceso de publicación.

Aprovechando herramientas tradicionales como npm y HiloLerna comprende las intrincadas interconexiones entre paquetes dentro del propio repositorio git. No hace falta decir que esto simplifica enormemente el proceso de compartir código dentro del repositorio, haciéndolo accesible sin esfuerzo.

Lerna tiene dos modos de gestión de versiones: fijo e independiente. El modo fijo mantiene todas las versiones de los paquetes al mismo nivel. Este enfoque es bastante popular; puede que lo hayas visto en Angular:

El modo independiente nos permite tener diferentes versiones por paquete. Si tienes un proyecto grande o complejo, utilizar un único repositorio para todos sus paquetes puede ayudarte con la organización y el mantenimiento.

¿Por qué Lerna?

El éxito de Lerna se encuentra en los miles de equipos de todo el mundo que lo utilizan, como Jest, NestJS, Create React App, Strapi, WebdriverIO y Nx.

Monorepos te permite desarrollar múltiples paquetes en el mismo repositorio, lo que es fantástico para la productividad. Puedes compartir código, establecer una propiedad clara y disponer de una Integración Continua (IC) rápida y unificada. Por eso cada vez más equipos se pasan a esta forma de desarrollo.

Para utilizar bien los monorrepos, se necesita una buena herramienta de monorrepos, y Lerna es exactamente eso. Lerna es rápidoampliamente utilizados y probados en combate.

Servicios de desarrollo integral de StarTechUP

Ventajas de utilizar Lerna Bootstrap

El uso de Lerna Bootstrap es una gran manera de poner en marcha tu proyecto rápidamente. Establece una estructura de repositorio mono inicial para ti, que puedes ajustar más adelante según sea necesario.

Estas son otras ventajas de utilizar la función Bootstrap de Lerna:

Nunca duplica el código dos veces

Lerna evita de forma inteligente la ejecución de tareas que ya se han ejecutado anteriormente. En su lugar, restaura los archivos y la salida del terminal desde su caché, garantizando la eficiencia y ahorrando un valioso tiempo de desarrollo. Al adherirse a este principio y aprovechar las capacidades de Lerna, los desarrolladores pueden agilizar su flujo de trabajo y mantener una base de código limpia y organizada.

Caché distribuida

La caché distribuida es la capacidad de compartir la caché de cálculo entre desarrolladores o máquinas de CI/CD. Esto no sólo mejora la colaboración, sino que también contribuye a una reducción significativa de los tiempos medios de CI. Al aprovechar esta función, los equipos pueden optimizar sus flujos de trabajo de desarrollo y lograr procesos de compilación y despliegue más rápidos, mejorando en última instancia la productividad y la eficiencia.

Dependencias de destino

Con Lerna, puedes especificar dependencias entre diferentes objetivos (scripts npm). Así, en lugar de gestionar las dependencias y ejecutarlas una a una, puedes ejecutar un único comando para ejecutar todos los objetivos dependientes juntos. Esto te ahorra mucho tiempo, especialmente cuando tienes un montón de objetivos que manejar.

Ejecución eficaz

Con Lerna puede aprovechar toda la potencia de la paralelización manteniendo el orden de ejecución correcto. Imagínese esto: tantos comandos como sea posible ejecutándose simultáneamente, asegurando una ejecución eficiente y rápida. Despídete de los retrasos de los comandos, especialmente cuando se trata de muchos otros paquetes.

Escalado infinito con ejecución distribuida

Lerna le permite ejecutar comandos sin esfuerzo en múltiples máquinas, eliminando la necesidad de complejas configuraciones. Amplíe Lerna para que se ejecute en tantas máquinas como desee sin la molestia de tediosas configuraciones. Esta capacidad excepcional acelera la ejecución de comandos, lo que resulta especialmente ventajoso a la hora de publicar paquetes.

Potente visualizador de gráficos

Lerna ofrece un sólido visualizador interactivo del espacio de trabajo que mejora su comprensión de la arquitectura de su espacio de trabajo. Esta potente herramienta proporciona información valiosa sobre las relaciones entre sus paquetes, lo que le permite identificar y abordar fácilmente cualquier problema potencial.

DX pulido

Lerna tiene esta poderosa CLI dinámica que asegura que sólo veas lo que importa cuando ejecutas el mismo proceso o comandos a través de múltiples proyectos. Por lo tanto, no más abrumado por una lista interminable de comandos. Sólo verás los que realmente importan para el proyecto en el que estás trabajando.

Mínimo

Lerna cuenta con un proceso de configuración sin fisuras, manteniendo sus archivos libres de desorden. Mejora la ejecución de tus scripts npm, proporcionando una velocidad superior. Como resultado, ahorrará un tiempo valioso en la configuración de Lerna y podrá utilizar su potencia de forma eficiente.

Lerna lo hace todo

¿Por qué tener herramientas separadas para ejecutar tareas, enlazar paquetes y luego publicar paquetes en ellas? Lerna lo hace-menos configuración, menos sobrecarga. Lerna es una única herramienta que puede hacer todo lo que necesita para gestionar su monorepo, lo que puede ahorrarle mucho tiempo y esfuerzo.

Inconvenientes del uso de Lerna

A pesar de todas sus grandes características, hay algunos inconvenientes en el uso de Lerna. A continuación te indicamos algunas cosas que debes tener en cuenta antes de empezar a utilizarla:

Las pruebas tardan mucho en ejecutarse y pierden el resaltado de sintaxis

El comando run test de Lerna va a través de cada paquete y ejecuta el script de prueba declarado en package.json - el problema aquí es que generará un test runner para cada instancia que encuentre. Esto también significaba que nuestra sintaxis destacada (pasando/fallando/advertencias, etc.) se omitía debido a que las pruebas se ejecutaban en un proceso shell separado.

Las llamadas a la red para la resolución de dependencias pueden convertirse en un cuello de botella

Para resolver las dependencias entre paquetes, Lerna realizará llamadas HTTP o al sistema de archivos. Si tienes un gran número de paquetes, estas llamadas a la red pueden sumarse y convertirse en un importante cuello de botella en tu flujo de trabajo.

El MNP tarda en publicar todos los cambios relacionados

Cuando se realizan cambios en varios paquetes, puede tomar mucho tiempo para que todos los paquetes sean publicados con NPM. Si tienes un gran número de paquetes o si un paquete tiene muchas dependencias de otros paquetes, esto puede sumarse y ralentizar significativamente tu flujo de trabajo.

portátil sobre un soporte

Funciones básicas

Lerna tiene algunas funcionalidades básicas que la convierten en una de las herramientas monorepo más populares del mercado. Estas incluyen:

Bootstrapping

Lerna arranca todos los paquetes en el repositorio principal. En otras palabras, instala todas las dependencias y enlaza las dependencias npm con cualquier dependencia cruzada, si la hay. Vincula todos los paquetes npm a las dependencias compartidas mediante la creación de enlaces simbólicos. Si se realiza alguna actualización en la dependencia compartida, inmediatamente tiene efecto en el código que la utiliza.

Publicación

El proceso de publicación nunca ha sido tan fácil. Todo lo que tienes que hacer es introducir un único comando (Lerna publish), ya que solicita una nueva versión de Lerna y actualiza todos los paquetes en git y npm. También puedes forzar la publicación de un nuevo paquete si lo deseas.

Versionado

Lerna ofrece la posibilidad de comprobar qué paquetes han cambiado desde la última versión. También puede comprobar el diff de todos los paquetes o de un solo paquete desde la última versión.

Ejecución simultánea de comandos

En lugar de ir a cada proyecto y luego seguir los comandos después de iniciar el servidor, puedes escribir un script en el archivo raíz package.json, usando el comando lerna run para ejecutar el comando en todos los proyectos concurrentemente. Este comportamiento se utiliza cuando se desea ejecutar todos los servidores al mismo tiempo.

Lerna ofrece muchas otras funciones. Éstas son sólo las básicas. Eche un vistazo a su documentación para más información.

Cómo utilizar Lerna

Creamos un paquete de integración y enlazamos la cabecera a la integración utilizando el siguiente comando como se indica a continuación:

npx lerna init

Todas las funciones de Lerna funcionarán de la misma manera.

De este modo

  • añadir lerna a la raíz package.json
  • generar un lerna.json
  • configurar un espacio de trabajo npm/yarn/pnpm

A continuación, ejecute el siguiente comando:

npm instalar

Ahora todos los proyectos del espacio de trabajo pueden referenciarse correctamente entre sí mediante la vinculación local de paquetes.

Estructura

Estructura de Lerna

Dado que Lerna funciona con Nx, puede utilizar sus funciones para abrir una visualización interactiva del gráfico del proyecto del espacio de trabajo.

Para abrir la visualización, ejecute

npx nx gráfico

Visualización de Lerna

Integración

Creamos un paquete de integración y enlazamos la cabecera a la integración utilizando el siguiente comando:

lerna add header -scope=integración

Lerna añadir cabecera
Pie de página de Lerna

Además, hemos intentado publicar los paquetes en NPM:

publicar paquetes en NPM

Integración vinculada a la aplicación Remix:

aplicación remix

Salidas en frontend de diferentes paquetes:

salidas en frontend

Conclusión

Lerna resuelve tres de los mayores problemas del monorepo. Compruébelo aquí. De hecho, es una gran ayuda para la reutilización del código, y podemos conseguir una nueva versión con una gestión de dependencias simplificada y una publicación de paquetes simplificada.

Si planeas construir una aplicación grande y piensas en arquitecturizarla en múltiples proyectos, entonces definitivamente deberías darle una oportunidad a Lerna. Hay mucho más que Lerna puede hacer.

desarrollador con su portátil

¿Necesita servicios front-end y back-end?

El proyecto de sus sueños puede parecer imposible, ¡pero no para nosotros! En StarTechUP ofrecemos servicios de desarrollo de software con un enfoque ágil. Nuestros expertos pueden ayudar en todas las áreas de desarrollo, desde el concepto hasta el lanzamiento.

Tanto si necesita servicios frontales y servicios internospodemos proporcionarle desarrolladores cualificados que tienen experiencia en trabajar con Lerna. También puede obtener nuestro Servicios DevOps para desplegar y mantener sus aplicaciones. Además, nuestro Desarrolladores de control de calidad garantizará un código de alta calidad.

Contacto con nosotros para obtener más información sobre cómo puede ayudarle nuestro equipo de ingenieros experimentados. Nos encantaría conocer su proyecto y saber cómo podemos ayudarle.

Sobre el autor: Andrea Jacinto - Redactor de contenidos

Escritora de contenidos con una sólida formación en SEO, Andrea ha estado trabajando con vendedores digitales de diferentes campos para crear artículos optimizados que sean informativos, digeribles y divertidos de leer. Ahora, escribe para StarTechUP con el fin de ofrecer los últimos avances en tecnología a los lectores de todo el mundo. Ver en Linkedin

MÁS INFORMACIÓN