Librería changesets para gestionar las versiones de un monorepo con PNPM.
Cuando trabajamos en proyectos, especialmente en monorepos que contienen múltiples paquetes, es esencial llevar un registro detallado de los cambios realizados. Esto ayuda a mantener control sobre las versiones y proporciona transparencia respecto a lo que se publica. La librería @changesets facilita este proceso al integrarse con el versionado semántico (SemVer), permitiéndonos registrar cambios y generar automáticamente un changelog al publicar nuevas versiones de nuestros paquetes.
A continuación, te explicaremos cómo funciona y cómo puedes usar esta herramienta en un caso práctico.
Para empezar a usar @changesets, primero debes inicializarlo en tu proyecto. Puedes hacerlo ejecutando el siguiente comando:
pnpm add -Dw @changesets/clipnpm changeset init
Se creará una carpeta llamada .changeset
en la raíz del proyecto. Y dentro de esta carpeta, encontrarás un archivo de configuración llamado config.json
. Aquí puedes personalizar el comportamiento de la herramienta.
El archivo config.json
básico tendrá un contenido como este:
{ "changelog": "@changesets/cli/changelog", "commit": false, "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch"}
changelog
: Indica cómo se generará el changelog (puedes deshabilitarlo o usar el formato predeterminado).commit
: Si está activado, genera automáticamente un commit al agregar un changeset.access
: Define el nivel de acceso para publicar los paquetes (restricted
para paquetes privados y public
para públicos).baseBranch
: Especifica la rama base del proyecto (generalmente main
o master
).updateInternalDependencies
: Controla cómo se actualizan las dependencias internas entre paquetes.Una vez instalado vamos a ver un ejemplo práctico:
Cada vez que realices cambios en uno o más paquetes, debes agregar un changeset para describir esos cambios. Hazlo ejecutando el siguiente comando:
pnpm changeset
Esto abrirá un asistente interactivo donde se te pedirá:
x.0.0
): Cambios que rompen compatibilidad.0.x.0
): Nuevas funcionalidades compatibles.0.0.x
): Correcciones o cambios menores.Esto generará un archivo en la carpeta .changeset
. Un ejemplo de archivo podría ser:
---"paquete-1": minor"paquete-2": patch---
Se agregó una nueva funcionalidad a `paquete-1` y se corrigió un error menor en `paquete-2`.
Si estás trabajando en equipo, probablemente trabajes en ramas separadas. Cada branch puede contener su propio changeset. Cuando las ramas se fusionan, los archivos de changesets se combinan automáticamente.
Una vez que los cambios estén listos para publicarse, ejecuta el comando:
pnpm changeset version
package.json
y changelog.md
de cada paquete.Por ejemplo, si tienes la siguiente estructura inicial:
monorepo/│├── packages/│ ├── paquete-1/│ │ ├── package.json│ │ ├── index.js│ ├── paquete-2/│ ├── package.json│ ├── index.js│└── .changeset/
Después de ejecutar el comando, los package.json
de los paquetes afectados tendrán versiones incrementadas y el changelog será actualizado.
Finalmente, puedes publicar las nuevas versiones usando el comando:
pnpm publish
Esto publicará los paquetes en el registro de npm (o cualquier otro configurado) con las versiones generadas.
Con este flujo de trabajo, puedes gestionar versiones y changelogs de manera eficiente en tu proyecto o monorepo. ¡Listo para mantener un historial claro y organizado de tus cambios!