Versionado y Publicación de Paquetes con Nx Release

Rate this content
Bookmark

Aprende a publicar paquetes npm como un profesional utilizando el poder de Nx. Partiendo de un repositorio básico con varios paquetes, estableceremos una estrategia de versionado, una estructura de registro de cambios y un flujo de trabajo de publicación. Después, exploraremos las numerosas características y opciones de Nx Release que te permiten adaptarte a los procesos de tu organización.

Austin Fahsl
Austin Fahsl
10 min
15 Feb, 2024

Video Summary and Transcription

En esta Charla, Austin Faisal presenta Nx Release y demuestra cómo mejorar los procesos de versionado y publicación con él. La herramienta permite una ejecución de prueba para previsualizar los cambios, mantiene los paquetes sincronizados y genera registros de cambios. También automatiza la preparación, confirmación, etiquetado y publicación de cambios en el registro. Nx Release ofrece características adicionales como versionado independiente, versionado automático con confirmaciones convencionales, creación de lanzamientos en GitHub, renderizado personalizable de registros de cambios y una API programable.

Available in English

1. Introducción a Nx Release

Short description:

Hola, mi nombre es Austin Faisal. Soy un mantenedor principal de Lerna, miembro del equipo principal de Nx, y te mostraré cómo mejorar tu proceso de versionado y publicación con Nx Release. Inicializaremos Nx en un repositorio existente, elegiremos una nueva versión para nuestros paquetes, generaremos un archivo de registro de cambios a nivel de espacio de trabajo y publicaremos todos nuestros paquetes en el registro remoto. Luego, cubriremos las características adicionales que ofrece Nx Release. Empecemos.

Soy un mantenedor principal de Lerna, miembro del equipo principal de Nx, y tengo experiencia en desarrollo web empresarial. Y te mostraré cómo mejorar tu proceso de versionado y publicación con Nx Release.

Primero, inicializaremos Nx en un repositorio existente. Luego, usaremos Nx Release para elegir una nueva versión para nuestros paquetes, generar un archivo de registro de cambios a nivel de espacio de trabajo y publicar todos nuestros paquetes en el registro remoto. Luego, cubriremos algunas características adicionales que ofrece Nx Release. Empecemos.

Así que partimos de un monorepo básico de JavaScript. Está utilizando espacios de trabajo de npm y tiene tres paquetes: inventory, requests y users. Lo primero que haremos es inicializar Nx e instalar el complemento NxJS. Así que responderé algunas de estas preguntas. Ninguno de los scripts necesita ejecutarse en orden, así que seguiré adelante y presionaré Enter. Ninguno es almacenable en caché y no voy a habilitar el almacenamiento en caché remoto. Sin embargo, definitivamente te animaría a investigar el almacenamiento en caché remoto para tu propio espacio de trabajo porque puede ahorrar mucho tiempo en CI y en tu flujo de trabajo local. Pero para este ejemplo, me centraré en Nx Release y simplemente lo omitiré.

De acuerdo, ahora voy a abrir el archivo NxJSON y le diremos a Nx exactamente qué paquetes queremos publicar. Haremos esto con la propiedad de proyecto bajo release. Esto es importante porque aunque Nx verá todos los proyectos en tu repositorio, no necesariamente quieres publicar todos ellos porque podrías tener aplicaciones o proyectos de testing finales u otras cosas que no son paquetes npm que deseas publicar. Así que en este caso, tenemos tres paquetes que queremos publicar. Todos están en la carpeta de paquetes, por lo que podemos usar este comodín para representar eso.

De acuerdo, luego vamos a confirmar nuestros cambios hasta ahora. Haremos esto para tener un árbol de trabajo fresco a partir de aquí. Y luego voy a agregar un cambio más. En realidad, voy a solucionar un error grave en los datos de inventario. Y por lo general, es mucho más difícil solucionar un error que simplemente agregar un comentario, pero esto funcionará para lo que necesitamos hacer. Así que voy a confirmar este cambio también. Y ahora podemos ejecutar Nx Release. Así que voy a ejecutar primero Nx Release dry run. Y estas dos opciones son muy importantes. La primera opción de release indica a Nx que esta es la primera vez que ejecutamos Nx Release.

2. Ejecutando Nx Release y Revisando los Cambios

Short description:

La opción de dry run te permite previsualizar los cambios sin escribirlos realmente en el disco o publicar los paquetes. Nx Release mantiene tus paquetes sincronizados de forma predeterminada, asegurando una fácil compatibilidad para los consumidores. Los archivos package JSON se actualizan con la nueva versión y también se actualizan las dependencias. El registro de cambios generado incluye los paquetes agregados y la corrección de errores reciente.

Así que no debes preocuparte por ninguna validación en torno a las etiquetas anteriores de git o asegurarte de que los paquetes existan en el registro remoto. Y la opción de dry run va a realizar esto como una prueba en seco. No va a escribir realmente ningún cambio en el disco. Va a omitir todas las operaciones de git. No va a publicar los paquetes. Solo nos dará una vista previa de lo que sucedería si no usáramos el dry run. Y esto es muy valioso cuando estamos lidiando con operaciones realmente difíciles de deshacer, como crear etiquetas de git, crear lanzamientos en GitHub, publicar paquetes en el registro.

Así que voy a seguir adelante y ejecutarlo. Y voy a elegir una versión menor. Entonces me pedirá qué tipo de cambio es este. Y diré menor. OK. El comando ha terminado. Y volvamos arriba y veamos qué sucedió. El primer paso es el versionado. Detecta cada uno de estos tres proyectos, inventory, requests, users. Lee la versión actual de cada uno como 0.0.1 del archivo package JSON. Y luego escribe la nueva versión basada en ese incremento menor que le dijimos que hiciera. La nueva versión, que es 0.1.0, la escribe en cada uno de los tres archivos package JSON. Ahora, Nx Release siempre mantendrá tus paquetes sincronizados de forma predeterminada. Así que cada vez que quieras incrementar la versión de alguno de ellos, incrementará la versión de todos ellos. Y así siempre estarás lanzando la misma versión para cada uno de tus paquetes. Esto es recomendado porque hace que sea muy fácil para los consumidores de tu paquete determinar qué versiones son compatibles. Porque si todos tienen el mismo número de versión, es muy, muy claro.

Si seguimos desplazándonos hacia abajo, podemos ver los cambios en los archivos package JSON. Y observarás que el paquete requests en realidad tiene una dependencia del paquete users. Y eso también fue actualizado por Nx Release. Y luego, aquí abajo, podemos ver el registro de cambios que se generaría. Así que el registro de cambios tiene una característica, que es la característica en la que agregué los paquetes users, requests e inventory anteriormente. Y luego está la corrección que acabamos de hacer en el paquete inventory.

3. Publicando Cambios en el Registro

Short description:

Obtenemos una vista previa de los comandos git y un recordatorio de que el dry run fue solo una vista previa. Después de confirmar todos los cambios, incluyendo las actualizaciones de los archivos package JSON y lock, Nx Release preparará, confirmará y etiquetará los cambios antes de publicarlos en el registro.

Y luego al final, obtenemos una vista previa de nuestros comandos git y un recordatorio de que debido a que usamos el dry run, nada de esto sucedió realmente. Fue solo una vista previa. Así que al ver que todo está como esperábamos, puedo continuar y quitar la opción de dry run y ejecutarlo nuevamente. Todavía voy a elegir menor. Y verás que es casi lo mismo, pero obtenemos una solicitud al final. ¿Quieres publicar estas versiones? Ahora, antes de responder a eso, quiero desplazarme hacia arriba y verificar nuevamente. Sí, todas nuestras versiones se han incrementado a 0.1.0. Los cambios en nuestros archivos package JSON se ven bien. El archivo lock se está actualizando porque el archivo lock tiene información sobre la versión de cada paquete en tu espacio de trabajo. Y dado que hemos cambiado eso, necesitamos cambiar el archivo lock. Y luego tenemos este registro de cambios que acabamos de ver y que se ve bien. Y por último, se prepararán, confirmarán y etiquetarán los cambios. Voy a seguir adelante y hacer clic en sí. Y luego se procederá a publicar. Tan fácil como eso. Simplemente ejecuta npm publish en cada uno de estos paquetes. Y verás que se ha publicado en localhost porque en este momento tengo un registro local. Pero esto es simplemente lo que sea tu npm, yarn o cualquier otro registro que tengas configurado.

4. Funciones Adicionales y Opciones de Personalización

Short description:

NxRelease admite la versionado independiente de paquetes, la versionado automática con commits convencionales, la creación de lanzamientos en GitHub, la personalización de la representación de los registros de cambios y una API programática sólida para scripts personalizados.

Y eso es todo. Así que hablemos de un par de funciones adicionales. Mencioné que de forma predeterminada, NxRelease mantendrá todas las versiones de tus paquetes sincronizadas. Bueno, hay otras formas de hacerlo. Definitivamente puedes versionar tus paquetes de forma independiente, donde cada paquete tiene potencialmente una versión diferente y no siempre lanzas todos tus paquetes al mismo tiempo. Eso es algo que NxRelease admite. Solo tienes que agregar un par de opciones de configuración.

Luego también puedes configurar la versionado automática con commits convencionales. Entonces, si no quieres lidiar con un mensaje o especificar explícitamente que quieres una versión menor, mayor o de parche, puedes optar por utilizar commits convencionales para eso. Si tus commits en tu repositorio siguen el estándar de commits convencionales, entonces NxRelease podrá revisar tu historial de Git desde el último lanzamiento y determinar qué tipo de incremento de versión hacer para cada uno de los paquetes.

Algunas otras cosas. NxRelease también puede crear lanzamientos en GitHub. Eso es algo en lo que puedes optar y los archivos de registro de cambios que se generan se cargarán automáticamente para las páginas de lanzamientos en GitHub. Puedes cambiar la representación de los registros de cambios. Entonces, si no te gusta el markdown que se genera de forma predeterminada, puedes agregar una función que reciba todos los datos de los commits y devuelva el markdown que desees usar. Y por último, NxRelease tiene una API programática muy sólida. Entonces, si tienes tus propios scripts para lanzar, tus propios scripts de versionado y publicación, puedes integrar NxRelease en eso. Los tres bloques principales de construcción de NxRelease, versionado, registro de cambios y publicación, puedes importar cada uno de ellos individualmente en tus propios scripts. Puedes usarlos, puedes usar cualquiera de ellos o los tres, como desees para crear tu propio proceso que funcione para ti. Y eso es todo. Gracias por escuchar. Por favor, consulta la documentación de Nx.dev que explicará todo esto aún más. Se detallarán las diferentes opciones de configuración y los diferentes casos de uso. Y espero verte en el futuro.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

pnpm – a Fast, Disk Space Efficient Package Manager for JavaScript
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
pnpm – a Fast, Disk Space Efficient Package Manager for JavaScript
You will learn about one of the most popular package managers for JavaScript and its advantages over npm and Yarn.A brief history of JavaScript package managersThe isolated node_modules structure created pnpmWhat makes pnpm so fastWhat makes pnpm disk space efficientMonorepo supportManaging Node.js versions with pnpm
Yarn 4 - Modern Package Management
JSNation 2022JSNation 2022
28 min
Yarn 4 - Modern Package Management
Top Content
Yarn 4 is the next major release of your favourite JavaScript package manager, with a focus on performance, security, and developer experience. All through this talk we'll go over its new features, major changes, and share our long-term plans for the project.If you only heard about Yarn without trying it yet, if you're not sure why people make such a fuss over package managers, if you wonder how your package manager can make your work simpler and safer, this is the perfect talk for you!
Vite - The Next Generation Frontend Tooling
React Advanced Conference 2021React Advanced Conference 2021
21 min
Vite - The Next Generation Frontend Tooling
How will we build web apps in the future? Let's learn how esbuild and bundlers like Vite built on top of it work to see how it can speed up our dev workflows.
The Secret Life of Package Managers
Node Congress 2022Node Congress 2022
9 min
The Secret Life of Package Managers
Ever wondered what happens after you hit npm install and go to grab a coffee? Let's deep dive into Npm and Yarn installation process, and how you can put this knowledge into practice.
Immutable Web Apps
JSNation 2022JSNation 2022
20 min
Immutable Web Apps
Resolving dependencies when they are all bundled together is easy. Resolving dependencies when they are in being loaded via script tags is much more challenging. The goal of this talk is to explain how Meltwater handles dependency resolution when building native Web Component based applications that rely on packages published by many different teams.
Package Management in Monorepos
DevOps.js Conf 2024DevOps.js Conf 2024
19 min
Package Management in Monorepos
We’ll talk about some of the pain points and look into recipes for effective package management in monorepos. 
We’ll discuss how package management works with npm, pnpm, and Yarn. Furthermore, I’ll show you a new tool that is less known but improves developer experience by a lot.