Hace casi un año (10 meses y 22 días meses para ser exactos) os informamos del lanzamiento de la herramienta Yarn, creada por Facebook para sustituir y mejorar a npm (el gestor de paquetes de Node.js). npm juega un papel cada vez más importante en todo tipo de desarrollos, tanto en back-end como en front-end, pero tenía algunos problemas que lo hacían inviable en proyectos muy grandes como los que maneja Facebook. Por ejemplo, su lentitud y el hecho de que no era predecible en cuanto a la manera de descargar las dependencias. Esos eran los motivos principales de haber creado Yarn.
Desde su lanzamiento muchos programadores han adoptado Yarn como un sustituto inmediato de npm, ganando sobre todo en velocidad y comodidad de uso. Sin embargo npm se ha puesto las pilas y presentó hace poco su versión 5 que solucionaba algunos de esos problemas, quedando (casi) en igualdad de condiciones con Yarn. Pero solo casi...
Ahora Yarn vuelve a adelantarles por la derecha con el lanzamiento de su versión 1.0, dando el paso a la madurez con este número de versión y añadiendo algunas novedades interesantes.
Entre las características a destacar de Yarn 1.0 tenemos:
1.- Espacios de trabajo (Workspaces)
Permiten la capacidad de agregar e instalar dependencias desde varios archivos package.json
en varias carpetas, sincronizando además las dependencias entre todos ellos.
Esto es muy útil para proyectos de tipo "monorepo" (es decir, con un solo repositorio de código) pero que realmente gestionan varios sub-módulos que pueden funcionar por separado. Los workspaces te permiten que cada subcarpeta que te interese pueda tener su propio package.json
y por lo tanto que se pueda compilar por separado, mientras que si lo deseas puedes compilar todos a la vez (o un proyecto mayor en el raíz que hace uso de los demás) sin tener que ir uno por uno.
Ejecutas yarn install
en la raíz y obtienes las dependencias de todos. Así de sencillo.
Puedes leer la documentación oficial para ver algún ejemplo de uso. Es especialmente interesante saber que se pueden usar patrones de tipo "Glob" para definir los sub-módulos.
2.- Auto-mezcla de archivos de bloqueo (lockfiles)
Si en un mismo proyecto trabajan muchas personas que añaden dependencias a los archivos package.json
, es muy fácil que se pueda producir un conflicto (en el control de código fuente) en el archivo yarn.lock
(o en package-lock.json
que es el que usa npm 5+), que controla el orden y las versiones de los paquetes que se van a instalar en local en cada equipo.
Resolver este tipo de conflictos manualmente es sencillo, pero si hay muchos puede ser tedioso y delicado.
La nueva característica de auto-mezcla de Yarn 1.0 hace que se resuelvan automáticamente al usar yarn install
, dejando el archivo sin conflictos en disco para que lo único que tengas que hacer es marcarlo como "resuelto" en Git.
3.-Resolución de versiones selectiva
Una situación lamentablemente común es la siguiente: tu proyecto utiliza una serie de dependencias, y uno de los paquetes de los que dependen éstas a su vez, lanza una actualización que resuelve un bug o un problema de seguridad importantes. Si el paquete que utiliza tu aplicación no se actualiza para forzar el uso de la nueva versión corregida, tu aplicación seguirá usando como dependencia de segundo nivel (o más) un paquete con problemas.
Para evitar este problema ahora Yarn permite añadir una sección resolutions
al archivo package.json
que indica a la herramienta qué versiones específicas de ciertos paquetes queremos usar, aunque la dependencia que se marca sea con otra versión.
Consulta la documentación de esta característica.
4.- Otras cosas
Lo anterior es lo más destacable y llamativo, pero esta versión trae multitud de otras cosas:
- Mejoras en la experiencia de actualización interactiva de paquetes
- Verificación de la integridad de archivos más rápida
- Ahora puedes incluir en tu proyecto el "parser" de los archivos de lock como un paquete npm.
- La posibilidad de delegar la ejecución de Yarn a una versión específica de la herramienta, de modo que aseguremos que todo el equipo usa la misma.
- Un montonazo de arreglos de pequeños bugs.
Puedes ver el log completo con todos los cambios aquí, así como el anuncio oficial de la versión.
Seguro que npm no tarda en añadir características similares, pero mientras tanto Yarn va un paso por delante.