Desde 2017, Yarn se ha consolidado como un pilar del desarrollo de JavaScript, incubando numerosas características en las que nuestro ecosistema ahora depende en gran medida. A medida que pasaron los años y los competidores mejoraron, también lo hizo Yarn, y ahora es el momento de adentrarnos en las características y compensaciones que hacen de Yarn una verdadera joya única en el ecosistema de JavaScript.
Yarn en Profundidad: Por qué y Cómo
Video Summary and Transcription
Yarn es un gestor de paquetes y gestor de proyectos que prioriza la solidez y confiabilidad. Ofrece flujos de trabajo y características como instalaciones sin dependencias y alineación de espacios de trabajo. El éxito de Yarn radica en su infraestructura y gemas ocultas. Tiene una arquitectura modular y está comprometido con el ecosistema. Yarn enfatiza la corrección y es más adecuado para aquellos que lo valoran.
1. Introduction to Yarn
Yarn es un gestor de paquetes para JavaScript, pero en realidad es más que eso. Está diseñado para ser un gestor de proyectos que te permite administrar scripts, dividir tu aplicación en modelos independientes, gestionar ciclos de lanzamiento, monitorear el uso de scripts y aplicar estándares de monorepo. Yarn valora la contribución de la comunidad y depende de sus colaboradores para hacer que el proyecto sea sostenible. Prioriza la solidez y garantiza que los problemas en tu aplicación no sean pasados por alto. Yarn tiene como objetivo proporcionar un entorno de desarrollo confiable y seguro.
Hola a todos, para aquellos que no me conocen, mi nombre es Maer. Actualmente trabajo en Datadog, una empresa centrada en la monitorización en la nube, y he estado liderando el desarrollo de Yarn durante algunos años. Hoy vamos a hablar extensamente sobre qué es Yarn y qué puede ofrecerte. Espero que al final de esta charla tengas una mejor idea de lo que hace que este proyecto sea único en nuestro ecosistema. Entonces, si le preguntas a alguien, probablemente te dirán que Yarn es un gestor de paquetes para JavaScript y estarían en lo correcto. Pero eso es solo parte de la historia. Yarn no es solo un gestor de paquetes, está diseñado para ser un gestor de proyectos. Y de hecho, si lo piensas, Yarn te permite administrar scripts. Te permite dividir tu aplicación en modelos independientes. Como veremos más adelante, también gestionará tus ciclos de lanzamiento, monitoreará el uso de scripts e incluso aplicará estándares de monorepo. Todas estas tareas van mucho más allá del típico gestor de paquetes y cada versión que lanzamos empuja aún más los límites. Entonces, es un gestor de proyectos que suena bien, pero ¿cómo se traduce en la práctica? ¿Cuáles son las cosas que buscamos cuando fusionamos pares que dan al proyecto lo que es? Discutamos los valores fundamentales. Entonces, lo primero que hay que darse cuenta es que somos una comunidad de colaboradores. El código abierto es un entorno muy exigente y la mayoría de los proyectos tienen dificultades para encontrar formas de hacer que su trabajo sea sostenible. Yarn no es una excepción. Para ayudar un poco, confiamos mucho en nuestros colaboradores para que sean los cambios que quieren ver, para contribuir de vuelta al proyecto que les gusta. En la práctica, esto significa que nuestro equipo principal dedica tanto tiempo a trabajar en nuestra infraestructura como en el propio producto. Recientemente, pasamos de Webpack a ESBuild para facilitar la construcción de Yarn. Varios comentarios te permiten construir parte de los binarios de Yarn a partir de fuentes. Así que puedes probar fácilmente características independientes. Incluso puedes escribirlas tú mismo y comenzar a usarlas en tu proyecto sin tener que esperar a que se fusionen. Yarn se trata de hacer posible que experimentes mucho más allá de lo que podríamos ofrecerte por nosotros mismos. El segundo valor muy importante que siempre tenemos en cuenta al desarrollar en Yarn es la solidez. Yarn debe decirte si algo está mal en tu aplicación. No debe pasarlo por alto. No debe hacer suposiciones no controladas. Esto puede sonar un poco rígido y es la razón por la que tienes tantos problemas con x depende de y sin listar sus dependencias, pero es realmente crítico. Porque ya sea que modifiques aplicaciones o bibliotecas, necesitas tener confianza en que algo que funciona ahora también funcionará en producción o cuando sea instalado por tus clientes. Si algo necesita romperse, entonces debe romperse temprano para que no lo encuentres más adelante cuando estés
2. Yarn's Impact and Workflows
El panorama de JavaScript es amplio y rápido. Yarn, como gestor de paquetes, tiene como objetivo guiar a los usuarios y ayudarles a comprender las herramientas que están utilizando. Yarn prioriza la experiencia del desarrollador y tiene como objetivo hacer lo correcto por defecto. Elimina la necesidad de validación manual de la instalación del proyecto. El impacto de Yarn se puede ver a través de historias de proyectos que lo han adoptado, incluido el propio repositorio de Yarn. El equipo de Yarn utiliza activamente todas las características integradas en el núcleo, lo que ha influido positivamente en su trabajo. Yarn también proporciona flujos de trabajo, como ciclos de lanzamiento, para mejorar los procesos de desarrollo.
3. Yarn's Zero-installs and Workspace Alignment
Utilizamos Zero-installs para mantener la caché del proyecto dentro del repositorio, lo que permite cargar el proyecto al instante y cambiar de rama fácilmente. La función de restricción de Yarn garantiza la alineación de los espacios de trabajo y aplica patrones en todos los espacios de trabajo. Esto elimina la necesidad de herramientas externas y proporciona consistencia. En Datalog, utilizamos un complemento de Yarn para supervisar la ejecución de scripts e identificar posibles cuellos de botella. El registro de dependencias nos ayuda a evitar problemas de implementación causados por la caída del registro remoto.
Otro flujo de trabajo que estamos utilizando son los Zero-installs. La idea no es tan complicada. Simplemente decidimos mantener la caché del proyecto dentro del propio repositorio. Por lo tanto, para cada paquete que tenemos, mantenemos exactamente un archivo zip en el repositorio. Como resultado, cualquier persona que cargue el proyecto puede comenzar a trabajar en Yarn al instante. Ni siquiera tienen que ejecutar Yarn install. Más importante aún, significa que nuestros colaboradores pueden cambiar de una rama a otra casi sin costo en términos de cambio de contexto. Esto es extremadamente valioso porque está relacionado con el tema de experimentación FAPR del que hablé anteriormente. Podemos iterar rápidamente en diferentes ramas sin tener que pagar los costos cognitivos de tener que ejecutar instalaciones frecuentes cada vez que ejecutas git checkout. Debo mencionar que agregar los paquetes de la caché al repositorio es un compromiso que hicimos para nuestro proyecto, pero no es algo que absolutamente tengas que hacer tú mismo si no estás convencido con la idea. Sabemos que algunos otros proyectos han decidido ejecutar Yarn install como solían hacerlo y eso está perfectamente bien. Simplemente ahora tienes la opción. Un problema cuando tienes muchos espacios de trabajo, y nosotros tenemos muchos, creo que tenemos alrededor de 44 en este momento, es que se vuelve difícil asegurarse de que todos los espacios de trabajo estén alineados en su configuración. Por ejemplo, ¿cómo asegurarse de que no haya dos espacios de trabajo que dependan de diferentes versiones de la misma dependencia? Puede convertirse en una tarea desalentadora y las herramientas existentes no ayudaron mucho con eso. Ahora, gracias a la función de restricción en el núcleo de Yarn, podemos aplicar patrones de períodos pasados en todos los espacios de trabajo en muy pocas líneas. Mejor aún, Yarn puede aplicar las correcciones por sí mismo. Por ejemplo, en el propio repositorio de Yarn, estamos utilizando esa función, no solo para garantizar que todas las dependencias de todos los espacios de trabajo sean las mismas, sino también para asegurarnos de que, por ejemplo, la licencia esté configurada correctamente en todos nuestros paquetes, que los scripts de compilación sean consistentes, entre otras cosas. Estos tres ejemplos te dan una buena idea del valor que los proyectos pueden obtener de Yarn. En general, ya no necesitan herramientas como learner o churn sets, ya que estos flujos de trabajo ahora reciben soporte de primera mano. Pero los proyectos de InterLab también pueden beneficiarse de Yarn, como veremos a continuación.
Trabajo en Datalog, y Datalog es una gran aplicación web junto con una infraestructura de JavaScript considerable que admite todo, desde el linting hasta las implementaciones. Yarn también ocupa un lugar central en el motor, y vamos a ver tres ejemplos. Si no sabes qué es Datalog, estamos creando un monitoreo en la nube realmente bueno, extrayendo señales de métricas arbitrarias. Dado este DMA, no te sorprenderá saber que también monitoreamos la forma en que nuestros desarrolladores interactúan con nuestra propia infraestructura, en particular en términos de tiempo de respuesta. Para lograr esto, escribimos un complemento para Yarn que observa todos los scripts que se ejecutan, cuánto tiempo tardan y lo envía todo al panel de control. Todos estos datos nos ayudan a identificar posibles cuellos de botella antes de que se conviertan en un problema y, en general, nos ayuda a priorizar nuestro trabajo. Como vimos con el propio repositorio de Yarn, registrar dependencias tiene un efecto negativo en la capacidad de contribuir eficientemente a un proyecto. Pero incluso en entornos corporativos, este patrón tiene su utilidad. Según nuestros datos, el registro remoto se cae aproximadamente una vez al mes. Al mantener nuestra propia copia de los paquetes, nunca nos bloqueamos durante nuestras implementaciones.
4. Eficiencia de CI y Joyas Ocultas de YARN
A pesar de un alto volumen de commits, nuestra CI no pierde mucho tiempo ejecutando instalaciones. YARN admite el protocolo de parche, integrándolo con el sistema de caché. YARN ofrece muchas joyas ocultas, como paquetes comprimidos, instalación desde Git y scripts portátiles. El éxito de YARN radica en la infraestructura construida a su alrededor, solidificando sus bases y permitiendo una iteración rápida.
Además, a pesar de un alto volumen de commits, nuestra CI no pierde mucho tiempo ejecutando instalaciones. En resumen, en lugar de tener que pasar minutos instalando proyectos en cada CI individual, ahora es realmente cuestión de segundos. Y un último punto que quiero mencionar. Tenemos muchos proyectos y muchas dependencias. Algunas de ellas son errores y tratamos de abordar ellos lo mejor que podemos. Pero hasta que las correcciones se fusionen en el proyecto principal y se publiquen, lo cual a veces es un poco difícil, necesitamos una forma sencilla de usar nuestros cambios localmente manteniendo cierta auditabilidad. Algunas herramientas de terceros existen solo para eso. Pero YARN ahora lo admite de forma nativa gracias al protocolo de parche de una manera que está directamente integrada con el sistema de caché y todos sus componentes. Así que es realmente bueno tener esta característica que proviene de la comunidad a través del paquete de parche, por ejemplo, publicado en NPM que se mueve como una característica de primera mano directamente integrada con el gestor de paquetes.
Creo que estos tres ejemplos te dan una buena visión general de lo que YARN tiene para ofrecer en el contexto de una empresa. Pero ten en cuenta que estos son solo ejemplos. Por ejemplo, no hemos hablado de cómo YARN puede mantener tus paquetes comprimidos en disco y compartirlos entre proyectos. Eso es lo que prefieras. O cómo puedes instalar paquetes directamente desde Git o cómo tus scripts son portátiles tanto en Windows como en POSIX sin que tengas que hacer nada. Y eso es solo una lista rápida de una sola diapositiva. Hay muchas más joyas ocultas en YARN. Hasta ahora hemos discutido qué es YARN y qué puede ofrecerte a ti y a tu organización. Pero ahora quiero aprovechar la oportunidad para ir más allá de lo habitual y contarte por qué funciona tan bien. Vamos a sumergirnos rápidamente en el proceso de desarrollo de YARN en sí mismo. Una gran parte de nuestra `salsa secreta`, por así decirlo, es nuestra infraestructura. Puede sorprender que el activo más valioso que tenemos no sea YARN en sí, sino las capas construidas a su alrededor. Pero ese es realmente el caso. Probablemente hayas notado que la velocidad de iteración de YARN está mucho más allá del estándar de la industria, y la gran razón de ello es que hemos invertido muchos recursos
5. Estrategia de Pruebas e Infraestructura
Se ejecutan pruebas de extremo a extremo cada cuatro horas en proyectos populares de terceros para garantizar la compatibilidad con YARN. La construcción de la base de código utilizando las últimas herramientas como TypeScript ha aumentado la confianza en el código. La estrategia de pruebas se revisó para utilizar el binario de la CLI, lo que facilita a los colaboradores externos escribir pruebas. Confiar en la infraestructura e invertir en costos iniciales conduce a una iteración más rápida y disminuye el riesgo de agotamiento.
6. Arquitectura y Futuro de YARN
YARN solía ser un monolito, pero ahora es modular con un núcleo que contiene algoritmos críticos. Las características se implementan como modelos, lo que facilita la ampliación de YARN con nuevas funcionalidades. Los miembros de la comunidad han creado sus propios complementos para personalizar los flujos de trabajo. YARN 3 está en desarrollo con mejoras y nuevas características. Se están explorando programas de patrocinio para apoyar la sostenibilidad de YARN.
En la actualidad, tenemos un núcleo que contiene todos los algoritmos críticos. Por ejemplo, el resolutor, que toma todos los paquetes, consulta el registro de npm y obtiene todas las versiones necesarias, o el fesher que descarga paquetes y que expone una serie de interfaces que los modelos pueden implementar cuando lo deseen. La mayoría de las características que ves en YARN se implementan de esta manera. La comunicación con el registro de npm es un modelo. La generación de la tabla de paquetes es un modelo. El plug and play en sí mismo, que quizás conozcas como la nueva estrategia de instalación en YARN, es un modelo externo en sí mismo. Solo en el momento de la publicación, esos modelos se agrupan para generar una CLI de YARN que conoces. Curiosamente, esta arquitectura también facilita la ampliación de YARN con nuevas funcionalidades. Por ejemplo, el comando focus tal como lo implementamos es literalmente cien líneas dentro de su propio modelo. Podrías implementarlo tú mismo, y de hecho algunas personas lo han hecho. Porque eso es algo interesante, a veces es muy difícil construir flujos de trabajo que satisfagan a todos. Por ejemplo, tenemos dos miembros de la comunidad que han creado sus propios complementos que hacen exactamente lo que pretenden hacer con su instalación enfocada. Eliminan dependencias si no las desean. Generan un archivo zip que pueden publicar en AWS de una sola vez. Es mucho más fácil implementar tus propios flujos de trabajo en algunos casos que esperar que una herramienta de código abierto implemente exactamente lo que necesitas. Entonces, si un comportamiento no cumple con tus expectativas, puedes experimentar con uno nuevo y hacérnoslo saber. Como mencioné, en los últimos meses, al menos dos miembros de la comunidad han comenzado a resolver sus implementaciones de monorepos modificando complementos dedicados a su caso de uso. Entonces, ¿dónde vemos a YARN en el futuro? Nadie puede predecir lo que va a suceder, pero ya puedo decirte lo que está sucediendo actualmente. Estamos trabajando en la próxima versión principal de YARN, que será YARN 3. Tendrá sus mejoras, corregirá algunos comportamientos de nuestra CLI y agregará nuevas características, incluyendo algunas que seguramente tendrán sentido. Al mismo tiempo, estamos comenzando a explorar programas de patrocinio para hacer que YARN sea sostenible. Mencioné anteriormente que en los proyectos de código abierto, hay muchos esfuerzos, recursos y tiempo que necesitamos encontrar formas de apoyar este trabajo. Aquí es donde puedes hacer algo. Si tú o tu equipo están interesados en que tu empresa patrocine parte del tiempo que dedicamos a YARN, contáctanos. Estaremos encantados de discutir cosas que sean favorables para ambas partes.
7. Impacto y Compromiso de YARN
YARN está vivo y en mejor forma que nunca. Te protege de errores y ofrece valor al ecosistema. Hemos tenido un impacto en proyectos como Next.js, Gatsby, Creative app, webpack y más. Nuestro conjunto de pruebas rara vez informa problemas. Estamos comprometidos a llevar el ecosistema en la dirección correcta. ¡Gracias por unirte a nosotros!
Todo esto para decir que YARN está muy vivo y en mejor forma que nunca antes. Nuestro equipo está alineado. Nuestros objetivos son claros y nuestra tecnología es sólida. Ciertamente, hemos tomado un rumbo más optimista de lo que solíamos hacer. Y creemos que, para la mayoría de las personas, será un resultado positivo neto, sabiendo que la herramienta te protegerá de tus errores. Por supuesto, diferentes personas pueden preferir diferentes tipos de herramientas. Y eso está bien, porque no hay un proyecto que sea para todos. En general, creo que está claro que YARN está aquí para quedarse. No es solo una moda pasajera. Y realmente creemos que ofrecemos algo lo suficientemente diferente como para proporcionar valor al ecosistema. Hemos estado en relación con muchos proyectos durante los últimos años, ajustando nuestras copias, expandiendo conceptos y promoviendo buenas prácticas. Y creo que eso realmente ha tenido un impacto. Cosas como Next.js, Gatsby, Creative app, webpack, y muchos más. Cuando comenzamos, las pruebas que mencioné anteriormente, esas pruebas de extremo a extremo que ejecutamos en todos los proyectos cada cuatro horas, a menudo fallaban debido a dependencias faltantes. Cada vez que sucedía, íbamos al proyecto relevante y compartíamos un PR con ellos para tener esas dependencias faltantes. Con el tiempo, comenzaron a prestar más y más atención a esto. Y hoy en día, nuestro conjunto de pruebas rara vez informa problemas. Esto también es el trabajo que hace Yarn. No solo creamos una herramienta CLI. También hacemos que el ecosistema se mueva en la dirección correcta, no solo para los usuarios de Yarn, sino para todos los usuarios de administradores de paquetes. Por supuesto, el problema es que no siempre es visible o llamativo. Así que a veces puede ser difícil para los externos tener alguna idea de la cantidad real de trabajo que ponemos en el proyecto, pero es algo que realmente es importante para nosotros y que seguiremos haciendo en el futuro.
Así que hemos llegado al final de esta presentación. Espero que la hayas disfrutado. Y estaré encantado de responder a las preguntas que puedas tener sobre este tema. Gracias. Muchas gracias por esa increíble charla, Mal. Realmente la disfruté mucho. Me encanta escuchar sobre yarn, sobre de dónde viene, y el futuro de hacia dónde se dirige. Recuerda, si tienes alguna pregunta, escríbela en el chat para que podamos
8. Resultados de la Encuesta de Yarn y su Evolución
Los resultados de la encuesta muestran que hay tanto nuevos adoptantes como usuarios de Yarn de larga data. Es interesante ver que hay un número significativo de personas que lo han estado usando por menos de un año. Me uní al proyecto Yarn mientras trabajaba en Facebook y continué trabajando en él incluso después de dejar la empresa. Yarn ha evolucionado para ser más estable y confiable con el tiempo, con un fuerte énfasis en la corrección técnica.
9. Yarn's Sound Development and Collaborative Growth
Yarn te ayuda a construir tu aplicación de manera sólida, similar a TypeScript y Flow. El punto de vista organizacional ha mejorado con un equipo central de principales colaboradores. Encontrar personas que compartan la misma pasión mantiene viva la llama.
10. Razones para usar YARN en lugar de NPM
La mayor razón para usar YARN en lugar de NPM es el énfasis de YARN en la corrección. Mientras que NPM se enfoca en que las cosas funcionen y hagan algo sensato, YARN adopta un enfoque más radical, asegurándose de que las cosas funcionen como se pretende. Ambos enfoques tienen sus beneficios, pero el énfasis en la corrección hace que YARN sea más adecuado para mí y nuestros usuarios.