Yarn: De Diseño a Implementación

Rate this content
Bookmark

En esta charla, repasaremos las diversas iteraciones por las que pasó el equipo de Yarn al diseñar uno de los software más críticos en el ecosistema de JavaScript. Discutiremos algunas de las principales decisiones, compensaciones, errores y éxitos que enfrentamos, y reflexionaremos sobre las evoluciones futuras y los desafíos que nos esperan. Al final de esta charla, tendrás una mejor comprensión del trabajo que realizan los equipos de código abierto a gran escala detrás del equipo, y esperamos que tengas una mejor comprensión de lo que hace que el código abierto sea tan especial.

This talk has been presented at DevOps.js Conf 2024, check out the latest edition of this JavaScript Conference.

FAQ

YARN clásico se refiere a todas las versiones anteriores a la versión 2.0. Fue creado para abordar problemas de consistencia, seguridad y rendimiento que surgieron en Facebook debido al crecimiento de su código y número de ingenieros.

Las principales áreas de enfoque de YARN incluyen determinismo, seguridad, estabilidad, y una experiencia de usuario limpia. Además, se concentraron en que YARN fuera completamente de código abierto.

La oferta inicial de YARN incluía archivos de registro habilitados de forma predeterminada, un espejo sin conexión para garantizar la instalación futura de proyectos, y la utilización de emojis para mejorar la salida de la CLI.

YARN evolucionó para soportar monorepos de forma nativa, introducir el uso de 'Plug and Play' para evitar instalaciones repetidas, y mejorar la gestión de dependencias con la implementación de espacios de trabajo. Esto llevó a la necesidad de reescribir YARN para gestionar mejor estas características.

YARN 4 mejoró su arquitectura con un pipeline modular durante la resolución de dependencias, linkers para diferentes tipos de instalaciones, y optimizó la experiencia del usuario dividiendo los comandos en diferentes paquetes llamados plugins.

Un monorepo es un repositorio que gestiona múltiples proyectos como si fueran un único proyecto. YARN trata todos los proyectos como monorepos, eliminando casos especiales y simplificando la gestión de múltiples paquetes dentro de un mismo proyecto.

YARN utiliza pruebas automatizadas cada seis horas para evaluar su rendimiento comparado con otros gestores de paquetes y realiza pruebas de compatibilidad con proyectos de código abierto cada cuatro horas para asegurar su correcto funcionamiento en diversos entornos.

Maël Nison
Maël Nison
28 min
15 Feb, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hoy discutiremos la evolución y la implementación de YARN, que se centra en la determinismo y la estabilidad. YARN Modern fue rediseñado para admitir proyectos con múltiples paquetes y adoptó Monorepos. YARN 2 mejoró la implementación del espacio de trabajo, la partición de la base de código y la estabilidad. La resolución de dependencias y la vinculación en YARN son manejadas por diferentes resolutores y fetchers. YARN tiene un sistema de complementos, un motor de restricciones y un sitio web rediseñado. Prioriza la compatibilidad, el rendimiento, las pruebas y las contribuciones a otros proyectos.

1. Introducción a YARN

Short description:

Hoy vamos a hablar sobre cómo surgió YARN, en qué se ha convertido y detalles interesantes sobre su implementación. Soy Maren Lison, una ingeniera de experiencia de desarrollo en Datadog, liderando el desarrollo de YARN desde 2017. YARN se divide en tres partes: clásico, moderno y detalles de implementación. El YARN clásico se creó para abordar problemas de consistencia, seguridad y rendimiento en Facebook. Elegimos crear YARN en lugar de contribuir a NPM porque queríamos abordar diferentes prioridades. YARN se centra en la determinismo y la estabilidad.

Hoy vamos a hablar un poco sobre cómo surgió, en qué se ha convertido y detalles interesantes sobre su implementación.

Primero, mi nombre es Maren Lison, soy una ingeniera de experiencia de desarrollo en Datadog. Y he estado liderando el desarrollo de YARN desde 2017, desde el punto cero hasta la versión 4.0 actual.

Dividí el contenido de esta presentación en tres partes. Primero vamos a hablar un poco sobre el YARN clásico. Luego pasaremos al YARN moderno, desde la versión 2.0 hasta hoy. Y finalmente, nos adentraremos en detalles interesantes sobre la implementación de YARN o algunos conocimientos meta sobre YARN.

Lo primero, el YARN clásico. Clásico es todo lo anterior a la versión 2.0. ¿Por qué creamos el YARN clásico? La respuesta está en el artículo del blog que se publicó en ese momento para presentar YARN, donde se encuentra esta interesante frase. A medida que el tamaño de nuestro código y el número de ingenieros crecía en Facebook, nos encontramos con problemas de consistencia, seguridad y rendimiento. En ese momento, el ecosistema de JavaScript era muy diferente de lo que es actualmente, y era muy difícil asegurarse de que cuando se ejecutaba un proyecto funcionara para todos en la organización. Eso es algo que realmente no funcionaba a la escala en la que operaba Facebook, por lo que decidieron destinar recursos para encontrar una solución.

Sin embargo, ahora planteemos la misma pregunta pero con un énfasis diferente. ¿Por qué creamos YARN? ¿Por qué no contribuimos simplemente a NPM? La razón es que en ese momento sentíamos que había tantas cosas diferentes que queríamos intentar abordar, que contribuir a NPM no tenía sentido. Cada proyecto tiene sus propias prioridades, y algunas de las cosas que YARN pretendía abordar no eran cosas que NPM pretendía desafiar, porque sentían que era la experiencia del desarrollador que querían tener. Eso es completamente válido. Decidimos que sería más fácil crear otro proyecto que hiciera diferentes compensaciones y siguiera un camino de exploración diferente. Contribuir no era realmente una opción porque no queríamos ir en contra de NPM en un proyecto que era completamente suyo. Recuerda que en ese momento NPM también era una empresa, por lo que tenían sus propias prioridades.

Cuando construimos YARN, decidimos centrarnos en cuatro áreas principales diferentes. La primera fue el determinismo. Es fácil recordar los archivos de registro como algo que se usa en todas partes, básicamente. Sin embargo, en ese momento eran muy raros. Éramos un proyecto. No estábamos imponiendo la versión de sus dependencias en diferentes instalaciones, lo que significa que todos obtendrían cosas diferentes. Sentimos que era importante que los proyectos que funcionan ahora funcionen en el futuro, y para eso, YARN tenía que hacer un trabajo enfocado en eso. Además, queríamos que YARN fuera seguro, es decir, queríamos detectar la mayor cantidad de errores posible antes de que se implementaran en producción. Por lo tanto, la estabilidad era muy importante para nosotros.

2. Características y Estabilidad de YARN

Short description:

Nos enfocamos en la experiencia del usuario al trabajar con la CLI, hicimos que YARN fuera completamente de código abierto y lo lanzamos como un proyecto independiente. La oferta inicial del producto incluía archivos de registro, un espejo sin conexión y emojis para una mejor salida de la CLI. YARN estaba completamente tipado usando Flow para una mayor estabilidad.

También era muy importante tener una UX limpia. Queríamos que YARN fuera una herramienta a la que cualquiera pudiera acceder sin tener un profundo conocimiento de cómo funcionan los gestores de paquetes y cómo se configuran los proyectos. Con ese fin, decidimos centrarnos un poco en la experiencia del usuario al trabajar con la CLI y no solo en la implementación del software en sí.

Finalmente, queríamos que fuera completamente de código abierto. Mencioné que NPM era una empresa, y en realidad todavía lo es, pero ahora es propiedad de GitHub. NPM era una startup, lo que significa que recibía inversiones de capitalistas de riesgo, y sentíamos que los incentivos no estaban completamente alineados con lo que necesitaba el ecosistema de JavaScript. Por eso queríamos que YARN fuera completamente de código abierto, y se lanzó como un proyecto que ni siquiera formaba parte de Facebook. Actualmente, Facebook no tiene ninguna participación en él. Solo es mantenido por personas de diferentes empresas.

La oferta inicial del producto cuando lanzamos YARN incluía cuatro cosas principales. La primera, por supuesto, eran los archivos de registro. Archivos de registro todo el día. En ese momento, NPM agregó shrinkwraps, que permitían registrar la versión de las dependencias, pero no estaban habilitados de forma predeterminada. También tenían un efecto en las instalaciones transitorias. Eran un poco extraños y queríamos tener algo más simple de entender y que estuviera habilitado de forma predeterminada. También incluimos un espejo sin conexión, que también seguía la misma estrategia de cómo asegurarnos de que el proyecto se siga instalando en el futuro. ¿Qué pasa si el registro de NPM se cae, ya sea temporal o permanentemente? ¿Podemos asegurarnos de que no nos afecte, porque no afecta nuestras instalaciones? El espejo sin conexión te permite almacenar los paquetes tarballs en la caché de tu proyecto, en algún lugar que tú controles, por ejemplo, dentro de tu repositorio Git, pero no necesariamente. También puedes almacenarlo en un sistema de archivos específico. De esta manera, incluso si el registro está caído, YARN aún puede instalar tu proyecto sin problemas. También incluimos emojis. Sé que cuando lees emojis como una característica del producto, no parece muy importante, pero en realidad lo era para nuestros usuarios. También creo que mostraba que la salida de la CLI es muy importante, y hacerla más fácil de analizar para los humanos tiene mucho sentido. Hoy en día lo hacemos con cosas diferentes a los emojis. Lo hacemos utilizando colores semánticos en los diferentes componentes que mostramos. Pero ese es el tipo de atención que decidimos poner en la experiencia del desarrollador.

Y finalmente, esto se trata más del mantenimiento de las propias características de YARN, pero entra en la categoría de estabilidad que mencioné anteriormente. YARN estaba completamente tipado usando Flow, no TypeScript en ese momento. Y eso era muy importante porque nos permitía detectar muchos problemas que de otra manera no habríamos descubierto si no hubiéramos verificado los tipos en el código base. NPM seguía una estrategia muy diferente en la que pretendían tener una cobertura completa a través de pruebas. Sin embargo, en nuestra experiencia, hacer algo así aún habría permitido que se pasaran cosas que no deberían haberse lanzado.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
NPM workspaces help manage multiple nested packages within a single top-level package, improving since the release of NPM CLI 7.0. You can easily add dependencies to workspaces and handle duplications. Running scripts and orchestration in a monorepo is made easier with NPM workspaces. The npm pkg command is useful for setting and retrieving keys and values from package.json files. NPM workspaces offer benefits compared to Lerna and future plans include better workspace linking and adding missing features.
Remix Flat Routes – Una Evolución en el Enrutamiento
Remix Conf Europe 2022Remix Conf Europe 2022
16 min
Remix Flat Routes – Una Evolución en el Enrutamiento
Top Content
Remix Flat Routes is a new convention that aims to make it easier to see and organize the routes in your app. It allows for the co-location of support files with routes, decreases refactor and redesign friction, and helps apps migrate to Remix. Flat Folders convention supports co-location and allows importing assets as relative imports. To migrate existing apps to Flat Routes, use the Remix Flat Routes package's migration tool.
La filosofía de Yarn
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
La filosofía de Yarn
Let's talk about React and TypeScript, Yarn's philosophy and long-term relevance, stability and error handling in Yarn, Yarn's behavior and open source sustainability, investing in maintenance and future contributors, contributing to the JavaScript ecosystem, open-source contribution experience, maintaining naming consistency in large projects, version consistency and strictness in Yarn, and Yarn 4 experiments for performance improvement.
Cómo hacer un juego web tú solo
JS GameDev Summit 2023JS GameDev Summit 2023
27 min
Cómo hacer un juego web tú solo
This talk guides you on how to make a web game by yourself, emphasizing the importance of focusing on tasks that interest you and outsourcing the rest. It suggests choosing a game engine that allows distribution on the web and aligns with your understanding and enjoyment. The talk also highlights the significance of finding fun in the creative process, managing scope, cutting features that don't align with the game's direction, and iterating to the finish line. It concludes by discussing the options for publishing the game on the web and leveraging unique web features.
Despliegue Atómico para Hipsters de JavaScript
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Despliegue Atómico para Hipsters de JavaScript
This Talk discusses atomic deployment for JavaScript and TypeScript, focusing on automated deployment processes, Git hooks, and using hard links to copy changes. The speaker demonstrates setting up a bare repository, configuring deployment variables, and using the post-receive hook to push changes to production. They also cover environment setup, branch configuration, and the build process. The Talk concludes with tips on real use cases, webhooks, and wrapping the deployment process.
Tu Ritmo con GraphQL
GraphQL Galaxy 2022GraphQL Galaxy 2022
31 min
Tu Ritmo con GraphQL
The Talk discusses the value proposition of GraphQL and its ability to solve common pain points in API development. It highlights the importance of making informed decisions when choosing GraphQL clients, servers, and schema builders. The Talk also emphasizes the need to focus on the best developer experience in the present rather than seeking a perfect long-term solution. Additionally, it mentions the future of the Urkel GraphQL client and the reasons for dropping ReScript support. Overall, the Talk provides insights into the current state and future trends of GraphQL development.

Workshops on related topic

Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web
React Summit 2024React Summit 2024
92 min
Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web
Featured Workshop
Vivek Nayyar
Vivek Nayyar
Sumérgete en el mundo de la IA con nuestro masterclass interactivo diseñado específicamente para desarrolladores web. "Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web" ofrece una oportunidad única para cerrar la brecha entre la IA y el desarrollo web. A pesar de la prominencia de Python en el desarrollo de IA, el vasto potencial de JavaScript sigue siendo en gran medida inexplorado. Este masterclass tiene como objetivo cambiar eso.A lo largo de esta sesión práctica, los participantes aprenderán cómo aprovechar LangChain, una herramienta diseñada para hacer que los modelos de lenguaje grandes sean más accesibles y útiles, para construir agentes de IA dinámicos directamente dentro de entornos JavaScript. Este enfoque abre nuevas posibilidades para mejorar las aplicaciones web con funciones inteligentes, desde el soporte al cliente automatizado hasta la generación de contenido y más.Comenzaremos con los conceptos básicos de LangChain y los modelos de IA, asegurando una base sólida incluso para aquellos nuevos en IA. A partir de ahí, nos sumergiremos en ejercicios prácticos que demuestran cómo integrar estas tecnologías en proyectos reales de JavaScript. Los participantes trabajarán en ejemplos, enfrentando y superando los desafíos de hacer que la IA funcione sin problemas en la web.Este masterclass es más que una experiencia de aprendizaje; es una oportunidad de estar a la vanguardia de un campo emergente. Al final, los asistentes no solo habrán adquirido habilidades valiosas, sino que también habrán creado funciones mejoradas con IA que podrán llevar a sus proyectos o lugares de trabajo.Ya seas un desarrollador web experimentado curioso acerca de la IA o estés buscando expandir tus habilidades en áreas nuevas y emocionantes, "Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web" es tu puerta de entrada al futuro del desarrollo web. Únete a nosotros para desbloquear el potencial de la IA en tus proyectos web, haciéndolos más inteligentes, interactivos y atractivos para los usuarios.
Encontrar, Hackear y solucionar las vulnerabilidades de NodeJS con Snyk
JSNation 2022JSNation 2022
99 min
Encontrar, Hackear y solucionar las vulnerabilidades de NodeJS con Snyk
WorkshopFree
Matthew Salmon
Matthew Salmon
npm y seguridad, ¿cuánto sabes sobre tus dependencias?Hack-along, hacking en vivo de una aplicación Node vulnerable https://github.com/snyk-labs/nodejs-goof, Vulnerabilidades tanto de código abierto como de código escrito. Se anima a descargar la aplicación y hackear junto con nosotros.Corrigiendo los problemas y una introducción a Snyk con una demostración.Preguntas abiertas.
Managers Are From Mars, Devs Are From Venus
TechLead Conference 2024TechLead Conference 2024
111 min
Managers Are From Mars, Devs Are From Venus
Workshop
Mo Khazali
Mo Khazali
Una Guía para Desarrolladores sobre Cómo Comunicar, Convencer y Colaborar Efectivamente con los Stakeholders
Es una historia tan antigua como el tiempo: la colaboración entre desarrolladores y stakeholders de negocios ha sido durante mucho tiempo un desafío, con una falta de comunicación clara que a menudo deja a ambas partes frustradas. Los mejores desarrolladores pueden comprender profundamente las necesidades de sus contrapartes de negocios, comunicar efectivamente la estrategia técnica sin perder a la audiencia no técnica y convencer al negocio de tomar las decisiones correctas. Trabajando en una consultoría, he fallado y tenido éxito en arquitectar y “vender” visiones técnicas, aprendiendo muchas lecciones en el camino.Ya sea que trabajes en una empresa de productos, seas consultor/freelancer, o quieras aventurarte más allá de ser solo un desarrollador, la capacidad de convencer y comunicar claramente con los stakeholders puede diferenciarte en la industria tecnológica. Esto se vuelve aún más importante con el auge de GenAI y el mercado de desarrolladores cada vez más competitivo, ya que la resolución de problemas y la comunicación efectiva son clave para posicionarte.En esta masterclass, compartiré ejemplos del mundo real, tanto buenos como malos, y te guiaré a través de poner la teoría en práctica mediante dojos.
Construye aplicaciones Web3 con React
React Summit 2022React Summit 2022
51 min
Construye aplicaciones Web3 con React
WorkshopFree
Shain Dholakiya
Shain Dholakiya
El masterclass está diseñado para ayudar a los desarrolladores Web2 a comenzar a construir para Web3 utilizando el Hyperverse. El Hyperverse es un mercado abierto de módulos inteligentes construidos por la comunidad, auditados y fáciles de descubrir. Nuestro objetivo es hacer que sea fácil para los desarrolladores de React construir aplicaciones Web3 sin escribir una sola línea de código de contrato inteligente. Piensa en 'npm para contratos inteligentes'.
Aprende más sobre el Hyperverse aquí.
Repasaremos todos los conceptos básicos de blockchain/crypto que necesitas saber para comenzar a construir en el Hyperverse, por lo que no necesitas tener ningún conocimiento previo sobre el espacio Web3. Solo necesitas tener experiencia en React.
Cómo crear experiencias de edición que tu equipo amará
React Advanced 2021React Advanced 2021
168 min
Cómo crear experiencias de edición que tu equipo amará
Workshop
Lauren Etheridge
Knut Melvær
2 authors
El contenido es una parte crucial de lo que construyes en la web. Las tecnologías web modernas aportan mucho a la experiencia del desarrollador en términos de construir sitios impulsados por contenido, pero ¿cómo podemos mejorar las cosas para los editores y creadores de contenido? En este masterclass aprenderás cómo usar Sanity.io para abordar la modelización de contenido estructurado, y cómo construir, iterar y configurar tu propio CMS para unificar los modelos de datos con experiencias de edición eficientes y agradables. Está dirigido a desarrolladores web que desean ofrecer mejores experiencias de contenido para sus equipos de contenido y clientes.