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 tiene un paquete grande o proyecto complejoEl uso de un único repositorio para todos los paquetes puede facilitar 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 desarrollar múltiples paquetes, compartir código, establecer una propiedad clara y tener 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.

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 conseguir procesos de creación e implantación 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.
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
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
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
Además, hemos intentado publicar los paquetes en NPM:
Integración vinculada a la aplicación Remix:
Salidas en frontend de diferentes paquetes:
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.
¿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.