Entonces, cada par de horas, creo que es cada seis horas, algo así, estamos ejecutando un conjunto de pruebas tanto en la instalación de NestJS como en Gatsby y vemos cuánto tiempo tarda para todos los gestores de paquetes, dependiendo de múltiples parámetros. Por ejemplo, cuando hay un código completo instalado, cuando ya hay un archivo de registro, pero no hay caché, cuando hay caché pero no hay archivo de registro, cuando está todo a la vez. Y nos permite ver tendencias. Hoy en día, todos los gestores de paquetes son bastante iguales en velocidad, especialmente YARN 4 y PMPM son muy similares en tiempo de instalación. Sin embargo, es interesante para nosotros ver si enviamos algo que contiene una regresión de rendimiento o si alguno de los competidores logró encontrar una forma de aumentar significativamente su velocidad, en cuyo caso también investigamos para implementarlo. Eso es bastante interesante de hacer de forma automática.
Todavía en el ámbito de la automatización, también estamos realizando un seguimiento de la compatibilidad con muchos proyectos en el ecosistema de código abierto. Por ejemplo, cada cuatro horas, estamos ejecutando pruebas en ESBuild para asegurarnos de que podemos ejecutar YARN en ESBuild y que el proyecto que así instalamos se puede utilizar sin problemas. Por lo tanto, no solo ejecutamos pruebas de YARN, sino que también ejecutamos pruebas de ESBuild, Ocusaurus, ESLint cada hora. Cada vez que uno de esos builds se convierte en un RAIL, a veces sucede, por ejemplo, digamos que un proyecto comienza a depender de una dependencia que olvidaron declarar en su package.json, pone la prueba en rojo y comenzamos a trabajar con los mantenedores para hacerles saber sobre el posible problema que hay en su software. Descubrimos si es un problema con su paquete o con YARN. A veces sucede, aunque es raro, y trabajamos juntos para solucionarlo.
La caché de YARN contiene archivos ZIP y no TGZ. La razón de esto es que los archivos TGZ deben descomprimirse por completo para acceder a un solo archivo, mientras que los ZIP permiten acceder a un archivo dentro de todo el archivo sin tener que descomprimir todo. YARN te permite ejecutar directamente tus scripts mediante la inclusión dinámica de archivos desde la caché, y para hacer eso, necesitamos poder señalar el archivo al que accedemos dentro de la caché, por eso usamos ZIP y no TGZ. Consideramos usar un formato personalizado. Sin embargo, los archivos ZIP son compatibles de forma nativa con la mayoría de los sistemas operativos y herramientas de terceros, por lo que es bastante práctico poder usar ZIP directamente. También implementamos una extensión ZIPFS para VS Code para agregar soporte ZIP a VS Code.
Hay partes de YARN en pnpm. Si eres usuario de pnpm, te interesará saber que si estás usando la bandera node-linker en tu archivo npmrc sin el valor hoisted, le indicará a pnpm que instale el proyecto utilizando una carpeta regular no de módulos, lo cual puede ser útil para fines de compatibilidad, y eso está impulsado por el enlazador de YARN. Mencioné antes que tenemos un enlazador no de módulos, un enlazador de pnpm y un enlazador pnp. Tanto el enlazador pnp como el enlazador no de módulos son reutilizados por pnpm para que sus usuarios también se beneficien de ese tipo de instalaciones. Si estás utilizando esas configuraciones, estás utilizando YARN. También tenemos un intérprete de shell que es utilizado por pnpm. Si tienes la configuración del emulador de shell en verdadero, pnpm lo interpretará como que deseas ejecutar todos los scripts en tu packet.json a través de un intérprete especial que funciona tanto en Linux como en Windows sin tener que configurar shells especiales en tu sistema. Eso es algo que está implementado por YARN en JavaScript. Implementamos este shell portátil que funciona en todos los sistemas y lo publicamos como un paquete para que otros gestores de paquetes puedan reutilizarlo. YARN también contribuye a Node.js.
Por ejemplo, la iniciativa Core Pack, que tiene como objetivo utilizar fácilmente tu gestor de paquetes preferido independientemente del proyecto en el que estés trabajando, es algo que comenzamos nosotros mismos. Estamos trabajando con Node.js para hacerlo estable y habilitarlo de forma predeterminada. Estamos trabajando en grupos de trabajo donde intentamos abordar problemas importantes que también afectan a otros proyectos. Por ejemplo, el grupo de trabajo de cargadores, que tiene como objetivo definir qué es un cargador en el contexto de Node.js. Es posible que estés familiarizado con el concepto de cargadores, por ejemplo, para Webpack. ¿Qué significa eso para Node.js? Eso es algo en lo que estamos trabajando, junto con un par de personas más en el proyecto de Node.js.
Gracias por tu tiempo. Esta charla fue corta, así que estoy seguro de que tienes muchas preguntas. No dudes en hacerlas en Discord, y también puedes encontrarme en Twitter y GitHub usando el nombre de usuario Arcanist. Espero que hayas disfrutado esta charla. Que tengas un buen día.
Comments