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.

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
Aprenda más sobre cómo aprovechar las características predeterminadas de los espacios de trabajo de npm para ayudarlo a administrar su proyecto monorepo, mientras también explora algunas de las nuevas características de npm cli.
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
Esta charla presenta la nueva convención Flat Routes que probablemente será la predeterminada en una futura versión de Remix. Simplifica la convención existente y también te brinda nuevas capacidades.
La filosofía de Yarn
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
La filosofía de Yarn
En los últimos años, Yarn se ha convertido en una de las herramientas más comunes utilizadas para desarrollar proyectos de JavaScript, en gran parte gracias a un conjunto de principios rectores. Pero, ¿cuáles son? ¿Cómo se aplican en la práctica a Yarn? Y, lo que es igual de importante, ¿cómo te benefician a ti y a tus proyectos?
En esta charla no nos adentraremos en pruebas de rendimiento o conjuntos de características: en su lugar, aprenderás cómo abordamos el desarrollo de Yarn, cómo exploramos nuevos caminos, cómo mantenemos nuestro código saludable y, en general, por qué creemos que Yarn se mantendrá firmemente establecido en nuestro ecosistema en los próximos años.
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
Nunca ha sido tan fácil hacer tu propio juego web, pero sigue siendo extremadamente difícil. ¿Qué juego deberías hacer? ¿Qué motor deberías elegir? Vamos a discutir cómo responder a estos problemas y formas de aprovechar la plataforma única que es la web.
Despliegue Atómico para Hipsters de JavaScript
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Despliegue Atómico para Hipsters de JavaScript
Desplegar una aplicación no es un proceso fácil. Te encontrarás con muchos problemas y puntos de dolor que resolver para que funcione correctamente. Lo peor es: ahora que puedes desplegar tu aplicación en producción, ¿cómo no vas a poder desplegar también todas las ramas del proyecto para tener acceso a vistas previas en vivo? ¿Y poder hacer un revert rápido a pedido?Afortunadamente, el clásico conjunto de herramientas de DevOps tiene todo lo que necesitas para lograrlo sin comprometer tu salud mental. Al mezclar expertamente Git, herramientas de Unix y llamadas a API, y orquestar todo ello con JavaScript, dominarás el secreto de los despliegues atómicos seguros.No necesitarás depender de servicios comerciales: ¡conviértete en el maestro perfecto de las herramientas y netlifica tu aplicación desde casa!
Tu Ritmo con GraphQL
GraphQL Galaxy 2022GraphQL Galaxy 2022
31 min
Tu Ritmo con GraphQL
Construir con GraphQL por primera vez puede ser desde desafiante hasta pan comido. Comprender qué características buscar en tus herramientas de cliente y servidor y adoptar los hábitos correctos (y deshacerte de los viejos hábitos) es la clave para tener éxito con un equipo de cualquier tamaño en GraphQL.

Esta charla ofrece una visión general de los desafíos comunes que he visto en numerosos equipos al construir con GraphQL, cómo superaron las fuentes comunes de frustración y la mentalidad que finalmente adoptaron, y las lecciones aprendidas, para que puedas adoptar y seguir confiando en GraphQL con confianza.

Workshops on related topic

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.
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 Conference 2021React Advanced Conference 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.