Plugins de Yarn 2: introducción
13 de abril de 2020
0 minutos de lecturaSi te interesa Yarn 2 y su arquitectura de plugins, un buen punto de partida es leer la página de documentación sobre la arquitectura de plugins en yarnpkg.com y seguir el tutorial de plugins de Yarn 2 en el sitio web.
Te recomiendo leer mi artículo introductorio sobre Yarn 2 si todavía no conoces Yarn 2.
Crear un plugin para Yarn 2
Empezamos por configurar un entorno para crear el plugin. Primero, creemos un proyecto nuevo que se administrará con Yarn 2:
Así obtenemos un proyecto de paquete npm limpio, administrado con Yarn 2.
Para indicarle a Yarn que queremos ejecutar un plugin como parte del proceso que realiza, creamos un archivo llamado .yarnrc.yml y agregamos allí la definición del plugin con la ruta al plugin que vamos a desarrollar:
Ahora pasemos al código del plugin. Crearemos algo que se conecte a una fase del proceso de Yarn llamada afterAllInstalled y, luego, imprima un mensaje en la consola. El código del plugin quedaría así:
Para probar el plugin, solo ejecuta el comando yarn desde la CLI y debería mostrar lo siguiente:
¡Genial! Ya tenemos nuestro propio plugin para Yarn 2.
Los plugins de Yarn 2 pueden hacer muchas cosas: agregar un comando al ejecutable de yarn, incorporar nuevos resolvers o fetchers —como los llama Yarn— e incluso conectar plugins de yarn entre sí.
Si quieres aprender a crear un plugin de Yarn 2 que agregue comandos a Yarn, visita la página oficial de documentación sobre plugins de Yarn, donde encontrarás los pasos.
Usar un plugin de Yarn 2 para acceder a información detallada sobre las dependencias
Como vimos en el ejemplo anterior, algunos hooks de Yarn nos permiten integrarnos de forma más estrecha, ya que proporcionan un objeto público global con metadatos detallados que Yarn recopila sobre el proyecto.
En el siguiente ejemplo, volvemos a integrarnos con el hook afterAllInstalled, que
se invoca con un parámetro adicional: el objeto público Project. Gracias a este parámetro extra, podemos acceder a toda la información que Yarn recopiló sobre el proyecto: dependencias, manifiesto del paquete, información del workspace, etc.
En el siguiente ejemplo de plugin, plugin-hook-install-hello-brave-world.js, capturamos la información de este objeto en la variable _ y escribimos su contenido en un archivo JSON para poder inspeccionarlo:
La estructura del objeto Project está definida en packages/berry-core/sources/Project.ts. A continuación, se muestra una lista parcial de las claves de nivel raíz del objeto:
Estas claves stored* nos ayudarán a entender las dependencias y a crear el árbol de este proyecto.
Para simplificar, ejecutaremos este plugin en un proyecto npm que solo tiene una dependencia: debug. A su vez, debug también depende de ms.
El objeto storedPackages es nuestro punto de partida para obtener la lista de dependencias del proyecto. Ten en cuenta que este objeto también incluye una entrada para el nombre real del proyecto, identificada con la referencia workspace: key.
Veamos cómo aparece la dependencia debug en el Map storedPackages:
La entrada de debug tiene un hash único que la identifica, algunos metadatos, como la versión resuelta, y otro objeto de dependencias anidado que enumera las dependencias de debug. Sin embargo, notarás que ms, que aparece en el objeto de dependencias anidado, no está resuelta y solo se indica mediante un rango.
Para resolver las dependencias anidadas, debemos usar descriptorHash y consultar el mapa storedResolutions, que tiene este aspecto:
Podemos encontrar que el descriptorHash de ms, 0742408cf974a8f1cd5081a9aec19656dc8016eec3c6e2358f302902e6f1f87241f601911cb45e855f3b0d26160c1520715ae79904c5ed1d29f5383ab906440e, es el tercer elemento de storedResolutions. Este hace referencia al hash 9455a02525b0e2c50eca4e204d71900a775107249d4245c1ea1f95e3f124c8a1d27484b29ccea934895da4d0273b22dc95cefd0561c39490cd7c86ab4404ca33, que luego se vuelve a asociar con una entrada de dependencia en el mapa storedPackages. Esta vez, se trata de los metadatos de la dependencia ms completamente resuelta:
Resumen de los plugins de Yarn 2
Yarn 2 aún es reciente y sigue ganando usuarios y recibiendo comentarios de la comunidad. Por eso, este es un gran momento para desarrollar plugins.
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.



