La gestión de proyectos JavaScript o TypeScript a gran escala que involucran múltiples paquetes interdependientes puede ser un desafío importante para los desarrolladores y los equipos de desarrollo. A menudo, los desarrolladores dependen de varios repositorios para cada paquete, lo que genera gastos generales en términos de mantenimiento del código, gestión de dependencias y colaboración.
Lerna, una poderosa herramienta desarrollada para administrar monorepos, agiliza este proceso. Monorepos permite a los equipos alojar varios paquetes en un único repositorio, lo que simplifica la gestión de dependencias y facilita la colaboración entre equipos.
Este libro electrónico tiene como objetivo proporcionar una guía completa sobre el uso de Lerna para administrar sus monorepos de manera eficiente. Ya sea que se trate de una biblioteca de componentes o de un proyecto a gran escala con varios paquetes interconectados, encontrará información valiosa que le ayudará a maximizar su productividad con Lerna.
Lerna es una herramienta de código abierto que facilita la gestión de múltiples paquetes en un monorepo. Ofrece potentes funciones como gestión automática de dependencias, control de versiones y publicación, lo que facilita el mantenimiento de proyectos de JavaScript y TypeScript a escala.
Los monorepos son una opción arquitectónica para muchos proyectos a gran escala, ya que brindan varios beneficios:
A pesar de estos beneficios, administrar un monorepo puede traer desafíos únicos, particularmente en la administración de dependencias y versiones. Lerna está diseñada para abordar estos desafíos de frente, proporcionando un flujo de trabajo optimizado para monorepos.
Antes de comenzar, asegúrese de tener Node.js y npm (o Yarn) instalados. Lerna es compatible tanto con npm como con Yarn.
Puedes instalar Lerna globalmente a través de npm:
npm install --global lerna
Alternativamente, puedes agregar Lerna como una dependencia de desarrollo en tu proyecto:
npm install --save-dev lerna
Una vez instalado, inicializa tu monorepo navegando al directorio de tu proyecto y ejecutando:
lerna init
Esto creará los archivos de configuración esenciales, incluido lerna.json, y configurará una carpeta de paquetes donde residirán sus paquetes individuales.
En un proyecto de Lerna, cada paquete vive en su propia subcarpeta bajo paquetes. Cada paquete debe tener su propio archivo package.json para la gestión de dependencias.
Estructura de muestra:
/my-project /packages /package-a /package-b lerna.json package.json
La gestión de dependencias entre múltiples paquetes es una de las principales fortalezas de Lerna.
Lerna le permite agregar dependencias a un paquete específico. Por ejemplo, si solo el paquete a necesita lodash, puede ejecutar:
lerna add lodash --scope=package-a
Cuando varios paquetes comparten dependencias, puedes llevar esas dependencias a la raíz de tu monorepo. Esto reduce la redundancia y acelera las instalaciones. Para habilitar la elevación, agregue esto a lerna.json:
{ "hoist": true }
Para instalar dependencias y vincular paquetes que dependen unos de otros, ejecute:
lerna bootstrap
Esto garantiza que todas las dependencias externas necesarias estén instaladas y que los paquetes puedan hacer referencia entre sí correctamente.
Lerna facilita la ejecución de scripts (por ejemplo, compilación, prueba, lint) en todos los paquetes de su monorepo.
Para ejecutar un script como build en todos los paquetes, use:
lerna run build
Si solo desea ejecutar un script en ciertos paquetes, use el indicador --scope:
lerna run test --scope=package-a
Esta flexibilidad permite una ejecución más específica, ahorrando tiempo durante el desarrollo.
Lerna proporciona funciones sólidas de control de versiones y publicación, lo que le permite versionar y lanzar paquetes fácilmente.
En modo fijo, todos los paquetes comparten el mismo número de versión. Cuando se actualiza cualquier paquete, el número de versión se incrementa para todos.
En modo independiente, cada paquete tiene su propio número de versión. Cuando se cambia un paquete, solo se actualiza la versión de ese paquete.
Para cambiar al modo independiente, modifique lerna.json:
{ "version": "independent" }
Para publicar sus paquetes en npm, ejecute:
lerna publish
Lerna se encargará del control de versiones y la publicación según su configuración.
Combinar Lerna con Yarn Workspaces puede optimizar aún más la gestión de dependencias al generar aún más dependencias compartidas.
Para habilitar Yarn Workspaces, modifique su archivo lerna.json:
{ "npmClient": "yarn", "useWorkspaces": true }
Luego actualiza tu paquete.json:
{ "workspaces": ["packages/*"] }
Esta integración aumenta el rendimiento y simplifica la gestión de proyectos a gran escala.
Lerna permite filtrar para ejecutar comandos para paquetes específicos o excluir ciertos paquetes.
Ejemplo de ejecución en paquetes específicos:
lerna run build --scope=package-a --scope=package-b
Ejemplo de exclusión de paquetes:
lerna run build --ignore=package-c
Puede definir comandos Lerna personalizados dentro de package.json para flujos de trabajo especializados. Estos comandos luego se pueden ejecutar en todos sus paquetes.
Lerna es una herramienta invaluable para administrar monorepos, que ofrece funciones que simplifican flujos de trabajo complejos, desde la administración de dependencias hasta el control de versiones y la publicación. Al adoptar Lerna, los equipos pueden reducir la complejidad, optimizar los procesos y mejorar la colaboración, lo que facilita el mantenimiento de proyectos a gran escala.
Ya sea que esté trabajando en una biblioteca de componentes simple o en un ecosistema de paquetes múltiples, Lerna proporciona las herramientas necesarias para administrar su proyecto de manera efectiva. Sigue experimentando con las funciones avanzadas de Lerna para desbloquear todo su potencial.
Codificación feliz :)
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3