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

NPM Audit avisa de las vulnerabilidades en las dependencias

La aparición de npm audit es un importante hito en el ecosistema Javascript. Las vulnerabilidades de muchos paquetes llevan tiempo siendo conocidas, pero ahora se ponen de manifiesto de forma muy significativa. A medio plazo nos encontremos con un registro de paquetes con mejor salud, a corto plazo está produciendo una avalancha de apertura de incidencias.

NPM privado: instalar y configurar Verdaccio

Verdaccio es una potente solución, muy sencilla de instalar y utilizar, que nos permite disponer de un registro privado de paquetes NPM con el que podemos reutilizar fácilmente código en nuestra organización. Daremos algunas sencillas claves sobre cómo dar los primeros pasos para comprender como funciona y cómo configurarlo en un entorno de producción.

NPM privado: 5 razones y 7 recomendaciones para utilizarlo

Utilizar un servicio de NPM privado, ya sea en la nube o instalado por ti, va a facilitar la reutilización ordenada de código dentro de tu organización, por lo que te animamos a que explores sus posibilidades. Aquí recogemos algunas razones y recomendaciones para aprovechar al máximo las posibilidades que ofrece una gestión privada de paquetes en Javascript.

Crear una API completa con NestJS por Xavi Sánchez Mir

En esta charla Xavi Sánchez Mir nos cuenta cómo crear una API completa con NestJS, en framework NodeJS de Moda. La charla empieza con un nivel sencillo para gente que se inicia en aplicaciones de servidor con Node y se completa con una amena discusión sobre la conveniencia o no de utilizar este tipo de frameworks.

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.