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:
- Yarn: A new package manager for JavaScript (Facebook)
- Hello, Yarn! (blog de NPM)
Novedades
HTTP2 para programadores. Enviar mensajes del servidor al cliente con Server Sent Event (sin WebSockets)
En esta charla, organizada por MadridJS, Pablo Almunia nos muestra cómo la mayoría de nosotros cuando oímos hablar por primera vez de HTTP2 nos ilusionamos con las posibilidades que presumiblemente se abrían para el desarrollo de soluciones web avanzadas y cómo muchos nos sentimos defraudados con lo que realmente se podía implementar.
En esta charla podemos ver cómo funciona el HTTP2, que debemos tener en cuenta en el servidor para hace uso de este protocolo y, sobre todo, cómo podemos enviar información desde el servidor al cliente de forma efectiva y fácil. Veremos con detenimiento cómo por medio de los Server-Sent Events (SSE) podemos recibir en el cliente datos enviados desde el servidor sin utilizar websocket, simplificando enormemente la construcción de aplicaciones con comunicación bidireccional.
Observables en Javascript con Proxies
En esta charla, organizada por MadridJS, Pablo Almunia nos habla de la observación reactiva de objetos en Javascript por medio de Proxy. Se describe paso a paso cómo funcionan los Proxies y en que casos pueden ser nuestro mejor aliado. Veremos que no hay que tenerles miedo, son bastante sencillos de utilizar, y nos ofrecen una gran abanico de posibilidades.
Aplicaciones JAMStack, SEO friendly y escalables con NextJS
En esta charla de Madrid JS, Rafael Ventura nos describe las funcionalidades clave de NextJS, nos muestra en vivo cómo desarrollar una completa aplicación JAMStack con Server Side Rendering (SSR) y Static Site Generation (SSG) y termina mostrando como publicar esta aplicación en Vercel.
Stencil JS: mejora el Time To Market de tu producto, por Rubén Aguilera
En esta charla Rubén Aguilera nos cuenta los problemas que tienen muchas empresas a la hora de sacar productos accesibles, vistosos y usables en el Time To Market que requiere Negocio y cómo podemos minimizar este tiempo gracias al DevUI con StencilJS para adecuar una aplicación de Angular a las exigencias del mercado en tiempo record.
breves
Javascript: 25 aniversario
25 años con Javascript han dado para mucho. Pero todavía queda mucho para este lenguaje de programación.
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.
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.