Seleccionar página

Facebook ha lanzado Yarn, un cliente NPM alternativo que promete gestionar las dependencias con mayor confiabilidad, precisión y rapidez que el cliente por defecto. Ha sido escrito para solventar algunos de los problemas que los equipos de Facebook, especialmente el equipo de React, se ha encontrado a la hora de gestionar de forma adecuada las dependencias en proyectos de gran envergadura.

Aunque algunos denominan a Yarn como gestor de paquetes, de momento es más preciso llamarlo cliente NPM, que es como la propia Facebook lo ha presentado, ya que, aunque dispone de su propio repositorio para el registro de paquetes, en la práctica utiliza NPM y Bower como repositorios por defecto.

¿Por qué se ha desarrollado Yarn?

Los grandes proyectos con cientos, e incluso miles, de dependencias, se enfrentan a problemas que muchos de nosotros no tenemos en nuestro día a día. Proyectos como React manejan entornos de integración asilados de Internet, con requisitos de seguridad muy elevados y una enorme cantidad de paquetes con dependencias cruzadas entre ellos. El tiempo y la complejidad de gestionar y actualizar todas las dependencias se dispara en proyectos de esta envergadura.

Lo cierto es que la instalación de los paquetes con el cliente NPM es bastante caprichosa y dependiendo del orden en el que se instalen los paquetes se producen diferencias en la estructura de carpetas y paquetes dentro de node_modules, lo cual puede llegar a ser bastante preocupante, ya que no podemos estar seguros que los paquetes instalados en un equipo sean exactamente los mismos que en otro cuyo orden de instalación se ha visto alterado.

Las principales características de Yarn para dar respuesta a estos problemas son:

  • La posibilidad de trabajar sin conexión a Internet para instalar los paquetes, lo cual puede ser útil en algunas ocasiones en entornos privados o de máxima seguridad, aunque para la mayoría esto no sea un problema
  • Aumenta la seguridad a la hora de instalar los diferentes paquetes. Esto es algo que siempre me ha preocupado, ya que no está muy claro que hacen algunos paquetes durante la instalación, aunque tampoco parece haber mucha documentación sobre que mejoras de seguridad presenta Yarn frente a NPM.
  • Mejora la velocidad a la hora de instalar una gran cantidad de paquetes. Realmente creo que se exagera este tema y que la mayoría de nosotros pecamos de impacientes, pero en casos de proyectos grandes puede ser significativo.
  • La instalación es perfectamente predecible y determinista, es decir, las mismas dependencias se instalan exactamente de la misma manera, sin depender del orden de instalación. Esto es, probablemente, lo más interesante.
  • La resolución de conflictos entre varios paquetes y sus dependencias se resuelve de una manera mucho más precisa y evita la creación de paquetes duplicados de forma más eficiente, lo cual no está nada mal.
  • Permite restringir la licencia utilizada en los paquetes instalados. En el complejo mundo de las licencias de código esto puede llegar a ser útil en algunos casos, aunque -sinceramente- la mayoría nos sentimos bastante perdidos en este tema y simplemente ignoramos las licencias que tienen unos u otros, instalando sin preocuparnos mucho de este tema.
  • La publicación de nuestros paquetes se puede hacer a NPM y Bower, lo cual puede simplificar bastante el flujo de trabajo si tenemos que trabajar con ambos repositorios.

Como desventajas debemos señalar:

  • No funciona con los paquetes privados de NPM, aunque parece que están trabajando para solventar esta molestia para aquellos que usan los servicios de NPM para paquetes privados, aunque la mayoría no lo usemos.
  • Apenas encontramos documentación sobre su funcionamiento. Lleva menos de una semana publicado y es muy previsible que esto se solvente pronto.

En este sentido tenemos que reseñar que realmente sus instrucciones son muy parecidas a las del cliente NPM, pero no iguales, por lo que conviene que conozcamos las diferencias entre Yarn y NPM a la hora de trabajar.

¿Que supone la aparición de Yarn?

Que Facebook saque un cliente NPM propio crea una cierta ansiedad en la comunidad -como ha reconocido la propia NPM. Parece como si se rompiera un cierto consenso a favor de resolver algunos problemas que una organización tan grande y con proyectos enormemente complejos se ha encontrado. Algunos tendrán los mismos problemas y encontrarán en Yarn una solución práctica, pero otros se verán simplemente atraídos por la novedad y lo adoptarán sin considerar sus ventajas o inconvenientes.

El papel que juega el cliente NPM a la hora de hacer la instalación es crucial, ya que de él depende la gestión efectiva de las dependencias. Yarn parece ofrecer algunas ventajas sobre el cliente tradicional de NPM y cada uno deberá considerar si lo utiliza o no.

Facebook tiene una enorme capacidad de generar ruido y, a diferencia de otros clientes NPM que han pasado completamente desapercibidos por la comunidad como como ied, pnpm, npm-install y npmd, la aparición de Yarn esta semana (se publicó el 11 de octubre de 2016) ha creado un gran revuelo.

Desde NPM se ha apresurado a dar la bienvenida a Yarn, conocen y reconocen el gran papel que el equipo de Facebook tiene en la comunidad y por lo tanto han sido muy cautos a la hora de expresar su punto de vista. No obstante, si Yarn tuviera un gran éxito y no solventará la limitación actual a la hora de trabajar con los paquetes privados de NPM, amenazaría el propio modelo de negocio de NPM que recibe sus ingresos de los clientes que deciden utilizar sus sistemas de paquetes privados.

Yarn dispone de su propio sistema de registro de paquetes, aunque por defecto utiliza NPM y Bower, pero esto podría cambiar en un futuro y es comprensible que NPM se pueda poner bastante nerviosa con esta aparición.

Conclusiones

En general recomendaría prudencia, ver con interés lo que puede ofrecer Yarn y cómo soluciona alguno de mis problemas. Es conveniente no dejarse llevar por una moda que puede llegar a ser pasajera. La mayoría de nosotros no tenemos los problemas que Yarn dice resolver y seguramente no lo necesitamos, pero inevitablemente vamos a conocerlo y, seguramente, muchos lo utilizaremos sin más, ya que es una herramienta nueva que tenemos a nuestra disposición.

Referencias:

Novedades

Desarrollar con cero dependencias, al menos una vez al año

La gran cantidad de utilidades, funciones, paquetes, módulos y frameworks que tenemos disponibles nos hacen la vida más sencilla y aumentan nuestra productividad, pero con el tiempo nos hacen olvidar lo más básico. De vez en cuando, atrévete a hacer un desarrollo con cero dependencias.

JSDayES – Vídeos

Si te lo has perdido o si quieres volver a ver las charlas y talleres del impresionante JSDayES 2017, aquí tienes todos los vídeos. Ponentes de primer orden, tanto nacionales como internacionales, muestran todos los aspectos de Javascript.

The CITGM Diaries by Myles Borins [video]

Myles Borins de Google, miembro del CTC de Node.js (Node.js Core Technical Committee), nos cuenta (en inglés, por supuesto) como funciona CITGM (Canary In The Gold Mine), una herramienta que permite obtener un módulo de NPM y probarlo usando una versión específica de NodeJS.

breves

Descrubir algunas características de console

En el día a día nos encontramos muy a menudo utilizando console. Es una navaja multiusos que nos facilita la vida a la hora de depurar nuestro código. La mayoría de nosotros ha utilizado console.log(), pero tiene otras muchas funcionalidades.

Matrices dispersas o sparse arrays en JS

Una característica que puede producir algunos problemas, si no lo tenemos en cuenta, es la posibilidad de tener matrices con huecos, es decir, con algunos de sus elementos sin definir. Es lo que se suele denominar una matriz dispersa o sparse array. Veamos cómo trabajar con esta características de las matrices.

Algunos operadores de bits usados con asiduidad

Cada día más a menudo podemos encontrar operadores binarios utilizados como formas abreviadas de algunas operaciones que de otra forma sería algo menos compactas y, quizás, más comprensibles. Veamos algunos casos en detalle.

Cómo diferenciar arrow function de function

En un reciente artículo Javier Vélez Reyes hace patente las principales diferencias entre las funciones tradicionales y las funciones flecha, ya que ambos modelos no son equivalentes e intercambiables. Veamos cómo es posible saber si una función ha sido construida por medio de la instrucción function o como una arrow function.