"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Dominar Lerna: una guía para administrar JavaScript Monorepos

Dominar Lerna: una guía para administrar JavaScript Monorepos

Publicado el 2024-11-01
Navegar:215

Mastering Lerna: A Guide to Managing JavaScript Monorepos

Tabla de contenido

  1. Introducción
  2. Capítulo 1: ¿Qué es Lerna?
    • ¿Por qué Monorepos?
  3. Capítulo 2: Instalación y configuración de Lerna
    • Requisitos previos
    • Guía de instalación paso a paso
    • Configurando su primer proyecto Lerna
  4. Capítulo 3: Gestión de dependencias en Lerna
    • Dependencias independientes
    • Elevando dependencias compartidas
    • Paquetes de arranque
  5. Capítulo 4: Ejecución de scripts en paquetes
    • Ejecución de scripts globalmente
    • Dirección a paquetes específicos
  6. Capítulo 5: Control de versiones y publicación con Lerna
    • Modo fijo versus modo independiente
    • Publicación de paquetes en npm
  7. Capítulo 6: Uso de Lerna con Yarn Workspaces
    • Habilitación de espacios de trabajo de Yarn en Lerna
    • Optimización del flujo de trabajo con Lerna Yarn Workspaces
  8. Capítulo 7: Uso avanzado de Lerna
    • Comandos de filtrado
    • Creación de comandos personalizados
  9. Capítulo 8: Mejores prácticas para Lerna Monorepos
    • Organización de paquetes lógicos
    • Automatización de pruebas y compilaciones
    • Integración CI/CD
  10. Conclusión
  11. Apéndice: Comandos comunes de Lerna

Introducción

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.


Capítulo 1: ¿Qué es 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.

¿Por qué Monorepos?

Los monorepos son una opción arquitectónica para muchos proyectos a gran escala, ya que brindan varios beneficios:

  • Código base compartido: con monorepos, la reutilización de código es más fácil. Esto reduce la duplicación y garantiza la coherencia entre proyectos.
  • Colaboración simplificada: los desarrolladores pueden trabajar juntos de forma más eficaz cuando todos los paquetes están en un solo lugar.
  • Procesos de compilación unificados: estandarizar la compilación, las pruebas y la implementación en múltiples paquetes se vuelve más fácil.

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.


Capítulo 2: Instalación y configuración de Lerna

Requisitos previos

Antes de comenzar, asegúrese de tener Node.js y npm (o Yarn) instalados. Lerna es compatible tanto con npm como con Yarn.

Paso 1: Instalar Lerna

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

Paso 2: Inicializando un Lerna Monorepo

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.

Paso 3: Agregar paquetes

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

Capítulo 3: Gestión de dependencias en Lerna

La gestión de dependencias entre múltiples paquetes es una de las principales fortalezas de Lerna.

Dependencias independientes

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

Elevando dependencias compartidas

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
}

Arranque

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.


Capítulo 4: Ejecución de scripts en paquetes

Lerna facilita la ejecución de scripts (por ejemplo, compilación, prueba, lint) en todos los paquetes de su monorepo.

Ejecución de scripts globalmente

Para ejecutar un script como build en todos los paquetes, use:

lerna run build

Dirección a paquetes específicos

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.


Capítulo 5: Control de versiones y publicación con Lerna

Lerna proporciona funciones sólidas de control de versiones y publicación, lo que le permite versionar y lanzar paquetes fácilmente.

1. Modo fijo

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.

2. Modo independiente

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"
}

Paquetes de publicación

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.


Capítulo 6: Uso de Lerna con Yarn Workspaces

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.


Capítulo 7: Uso avanzado de Lerna

Comandos de filtrado

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

Comandos personalizados

Puede definir comandos Lerna personalizados dentro de package.json para flujos de trabajo especializados. Estos comandos luego se pueden ejecutar en todos sus paquetes.


Capítulo 8: Mejores prácticas para Lerna Monorepos

  1. Organizar paquetes lógicamente: agrupa paquetes relacionados para una mejor reutilización del código.
  2. Usar Hoisting: Hoisting dependencias compartidas ahorra espacio y acelera los tiempos de instalación.
  3. Automatizar pruebas: utilice lerna run para automatizar las pruebas en todo su monorepo.
  4. Canalizaciones de CI/CD: implemente flujos de trabajo de implementación e integración continua para probar e implementar cambios automáticamente.
  5. Espacios de trabajo de Yarn: aproveche Yarn Workspaces con Lerna para una mejor gestión de la dependencia.

Conclusión

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.


Apéndice: Comandos comunes de Lerna

  • lerna init: Inicializa un monorepo de Lerna.
  • lerna bootstrap: Instala dependencias y vincula paquetes.
  • lerna add [paquete] --scope=[nombre-paquete]: Agrega una dependencia a un paquete específico.
  • lerna run [script]: ejecuta un script en todos los paquetes.
  • lerna publicar: publica paquetes en npm.

Codificación feliz :)

Declaración de liberación Este artículo se reproduce en: https://dev.to/samuel_kinuthia/mastering-lerna-a-guide-to-managing-javascript-monorepos-4f2b?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
Último tutorial Más>

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