¿Se necesita más a Lerna con los espacios de trabajo de NPM 7.0.0?
Realmente no tengo experiencia con esta nueva función npm.
Npm/rfcs escribe sobre esto:
En primer lugar, existe la alternativa de dejar el problema establecido para que el usuario lo resuelva, ya existe el proyecto muy popular Lerna que proporciona algunas de estas características.
También está disponible la alternativa de admitir solo el aspecto de instalación (o arranque, como lo llama Lerna) de esta propuesta, siguiendo un enfoque menos rico en funciones pero que aún permitiría el objetivo básico de mejorar la experiencia del usuario de administrar múltiples paquetes secundarios pero de todos los comentarios recopilados durante la fase de investigación de este RFC, esta alternativa es mucho menos deseable para la comunidad de mantenedores involucrados.
Me alegro por cada respuesta y explicación :)
NPM 7 ya está disponible y admite espacios de trabajo. también continuarán desarrollando este dominio en los próximos lanzamientos,
Dicho esto, lerna
viene con muchas más funciones de alto nivel que npm7
o los espacios de trabajo de yarn
, además, yarn
declaró que nunca intentarán reemplazar herramientas como lerna
, sino que tienen la intención de implementar la lógica central de manejo de espacios de trabajo como la instalación de dependencias de paquetes secundarios y enlace simbólico de paquetes. Espero que npm
haga lo mismo.
Un gran ejemplo es el comando: lerna changed
que le brinda la lista de paquetes que han cambiado desde la última versión etiquetada, esto podría ser extremadamente útil para CI/CD. le invitamos a explorar los comandos adicionales proporcionados por lerna .
El único comando a partir de hoy compatible con npm7
relacionado con los espacios de trabajo es en realidad npm i
/ npm ci
, que no es nuevo, pero se encarga de los paquetes anidados y los enlaces simbólicos.
He escrito un artículo que profundiza en la configuración en caso de que desee pasar a un monorepo con npm7, por lo que trabajar sin lerna es definitivamente una opción, probablemente necesitará trabajar más en el lado de CI/CD en comparación con lerna y agregue algunos scripts de desarrollo por su cuenta que afectarán los paquetes anidados. Además, en mi opinión, lerna se adapta más al desarrollo de bibliotecas que a las aplicaciones.
La respuesta es sí, aún necesita Lerna u otra herramienta para complementar las características que vienen con los espacios de trabajo npm@7. Estas son las cosas que no manejan los espacios de trabajo npm @ 7 (al momento de escribir esta respuesta):
Comprender la topología monorepo
Los espacios de trabajo de npm conocen la topología del paquete monorepo hasta cierto nivel. Los espacios de trabajo, por ejemplo, saben que el paquete-c usa el paquete-a y el paquete-b como sus dependencias. Pero hay una pequeña cosa a tener en cuenta:
$ npm run build --workspaces
Este comando ejecutará npm run build
para todos los paquetes monorepo.
Digamos que el paquete-a depende del paquete-b y el paquete-c depende tanto del paquete-a como del paquete-b. El orden de ejecución que obtiene al ejecutar el comando depende de su matriz de workspaces
de trabajo en package.json
. Así que si tienes esto:
{ "workspaces": ["package-a", "package-b", "package-c"] }
entonces el orden de construcción será:
pero el orden correcto debería ser:
Para que las cosas se construyan en el orden correcto, debe asegurarse de enumerarlas en el orden correcto en package.json:
{ "workspaces": ["package-b", "package-a", "package-c"] }
Gestión del cambio
Lerna puede detectar cambios en monorepo y proporcionarle una lista de paquetes que han cambiado. Esto es útil si solo desea ejecutar pruebas para paquetes modificados. Los espacios de trabajo npm@7 aún no pueden hacer tal cosa (5 de octubre de 2021).
Publicación
Lerna puede administrar el control de versiones y la publicación de sus paquetes. Viene con dos estrategias diferentes de gestión de versiones: fijas e independientes. Genera un registro de cambios y publica solo los paquetes modificados en npm.
Seguro que hay mucho más, pero estas son las cosas principales que aún necesita además de los espacios de trabajo npm@7. Si usa Lerna u otras herramientas, eso depende de usted.
He documentado todo lo que he aprendido mientras mantenía JavaScript monorepo con Lerna en un artículo. Describe cómo los procesos de administración de monorepo se simplificaron significativamente después de la introducción de npm@7, pero por qué todavía necesitamos usar Lerna u otras herramientas además.