Yarn 2: ¿el futuro de los administradores de paquetes para JavaScript?
3 de abril de 2020
0 minutos de lectura¿Qué es Yarn 2?
Yarn 2 es la nueva versión del revolucionario y consolidado administrador de paquetes npm Yarn. Incluye mejoras como Plug’n’Play, una arquitectura de plugins, monorepos, mejor compatibilidad con espacios de trabajo e instalaciones Zero. Puedes encontrar el repositorio de la comunidad en GitHub: https://github.com/yarnpkg/berry.
¿Por qué necesitábamos una nueva versión de Yarn?
Yarn 2 cumple varios de los criterios que han mantenido a los desarrolladores debatiendo sobre cómo administrar proyectos de JavaScript:
Monorepos
Tanto si te gustan los monorepos como si no, administrarlos requiere un buen conjunto de herramientas para garantizar el éxito y facilitar la gestión de proyectos grandes y flujos de trabajo complejos.
Una fórmula popular para configurar un monorepo para proyectos de JavaScript es combinar los espacios de trabajo de Yarn (disponibles desde Yarn 1) con Lerna como administrador de proyectos.
La buena noticia de Yarn 2 es que ahora Yarn funciona como administrador de paquetes y de proyectos, y busca ofrecer una experiencia integral para ejecutar monorepos sin complicaciones.
Plug’n’Play
¿Qué no se ha dicho sobre node_modules? La nueva documentación de Yarn profundiza en las limitaciones de node_modules como estructura de carpetas y explica por qué necesitamos una nueva forma de pensar sobre cómo administramos las dependencias.
La estrategia Plug’n’Play no es exclusiva de la nueva versión de Yarn; ya la habíamos visto en el ecosistema. Kat Marchán presentó Tink en JSConf Eu 2019 durante su presentación. Esto no quiere decir que el enfoque de Tink para Plug’n’Play sea igual al de Yarn, pero vale la pena recordar que estas ideas llevan un tiempo difundiéndose mediante distintos experimentos en nuestro ecosistema de JavaScript.
Un aspecto interesante de la seguridad en la implementación de Plug’n’Play de Yarn 2:
La carpeta de caché local .yarn/cache se monta como de solo lectura, por lo que no permite intentos maliciosos de modificar paquetes ya instalados en el sistema de archivos.
Gracias a la naturaleza de Plug’n’Play en Yarn, se pueden aplicar comprobaciones estrictas, como impedir que los paquetes hagan referencia a los llamados paquetes fantasma, que no están definidos en la lista de dependencias de un paquete o proyecto.
Plugins
Quizás esto tenga más que ver con la perspectiva de los desarrolladores y mantenedores que con la de los usuarios finales, pero sigue siendo importante mencionarlo. Al crear Yarn 2 con TypeScript, surgió la oportunidad de reducir la complejidad y el mantenimiento del núcleo mediante una arquitectura de plugins que permite a otros ampliar Yarn.
¿Aún más funciones?
En su anuncio del lanzamiento de Yarn 2 en dev.to, Maël Nison compartió muchos detalles sobre las funciones y sus riesgos, que hacen de Yarn 2 una opción adecuada para futuros proyectos de JavaScript y Node.js. Te recomiendo leer su artículo sobre el lanzamiento, así como la página oficial de funciones de Yarn para conocer más razones.
Cómo empezar a usar Yarn 2
Yarn adoptó una estrategia de instalación por repositorio —o por proyecto, si prefieres—, lo que significa que puedes tener una instalación global de Yarn —como la primera versión, classic— y luego cambiar a Yarn 2 para un proyecto específico.
Para empezar a usar Yarn 2, necesitas tener una versión actualizada de Node.js, como mínimo la 10. En cualquier caso, Node.js LTS siempre debería ser tu versión preferida, ya que cuenta con soporte y mantenimiento. Las versiones de Node.js anteriores a la 10 ya no tienen soporte, por lo que no reciben correcciones de errores ni de seguridad.
Cómo cambiar a la nueva versión de Yarn
Para empezar, crearemos un directorio nuevo e iniciaremos un proyecto:
Veamos cuál es tu versión actual de Yarn con yarn --version. Si usas una versión de Yarn anterior a la 1.22, escribe lo siguiente:
Si tu versión local de Yarn es la 1.22 o posterior:
Esto debería descargar Yarn 2 y mostrar un resultado como el siguiente:
Luego puedes verificar tu versión de Yarn con yarn --version. En mi caso, muestra lo siguiente:
Como de costumbre, se recomienda confirmar .yarnrc y .yarnrc.yml para compartir la configuración en todo el repositorio. Es interesante observar el uso de la carpeta .yarn, donde Yarn administra la caché, el entorno de ejecución, los plugins y otros datos.
Al actualizar la política para Yarn 2, se descarga una copia de la versión más reciente en la carpeta local .yarn/ y se crea un archivo .yarnrc que registra la ruta en el disco de la versión instalada.
Cómo instalar módulos de npm en Yarn 2
Agreguemos Fastify, el framework web de Node.js, a nuestras dependencias:
Ya puedes ver algunos cambios en la nueva salida de Yarn:
Cada conjunto de tareas relacionadas que se ejecuta durante la instalación se agrupa.
Yarn incluye en la salida de la CLI una referencia a cada grupo de tareas. Así, si tienes un problema con alguno, será más fácil solucionarlo.
El archivo de bloqueo sigue siendo la forma preferida de fijar las dependencias en Yarn para obtener versiones repetibles y auditables. Sin embargo, una novedad de Yarn 2 es que ahora usa la sintaxis YAML estándar.
Los comandos habituales de administración de paquetes siguen siendo los mismos que en las versiones anteriores de Yarn:
yarn add [package] --devyarn remove [package]yarn up [package]
Para ejecutar JavaScript o Node.js necesitas Yarn
Ahora que ya no hay un directorio node_modules, no funcionará ejecutar un script una sola vez, como node script.js, porque no podrá resolver las dependencias indicadas en ese archivo. Por eso, debes ejecutar yarn node script.js. Yarn iniciará el proceso de Node con un archivo propio que modifica parte de la lógica para permitir la magia de PnP. Para ello, usa la opción de CLI integrada de Node --require.
Ten en cuenta también que yarn node no es necesario dentro de los scripts definidos en el campo scripts (que es como se invocan muchas herramientas); basta con llamar a node. ¡Gracias a Mael por aclararlo!
¿Qué sigue?
Yarn 2 aún necesita tiempo y la evaluación de la comunidad para comprobar si resiste el paso del tiempo y si la comunidad de JavaScript reconoce las ideas novedosas que implementa y desarrolla.
Te recomiendo visitar el sitio web de Yarn para consultar la documentación detallada en https://yarnpkg.com/cli/install mientras lo pruebas en tu próximo proyecto.
Empieza con los desafíos de Capture the Flag
Aprende a resolver desafíos de captura la bandera con nuestro taller virtual introductorio a pedido.



