pnpm: un gestor de paquetes rápido y eficiente para JavaScript

Rate this content
Bookmark

Aprenderás sobre uno de los gestores de paquetes más populares para JavaScript y sus ventajas sobre npm y Yarn.

  • Una breve historia de los gestores de paquetes de JavaScript
  • La estructura aislada de node_modules creada por pnpm
  • Qué hace que pnpm sea tan rápido
  • Qué hace que pnpm sea eficiente en el uso del espacio en disco
  • Soporte para monorepos
  • Gestión de versiones de Node.js con pnpm

FAQ

pnpm es un gestor de paquetes para JavaScript que optimiza el uso del espacio en disco y aumenta la velocidad de las operaciones. Es único porque crea una estructura de módulos de nodo aislada, donde cada paquete solo tiene acceso a sus dependencias declaradas, lo que previene errores y mejora la eficiencia.

pnpm utiliza un almacenamiento direccionable por contenido, guardando archivos por un código hash basado en su contenido. Esto significa que los archivos idénticos entre diferentes paquetes solo se almacenan una vez, reduciendo significativamente la cantidad de espacio en disco utilizado.

pnpm ofrece instalaciones más rápidas al manejar las dependencias de manera independiente y paralela, y utiliza menos espacio en disco gracias a su sistema de almacenamiento direccionable por contenido. Además, su estructura de módulos aislada evita problemas de dependencias no declaradas.

Para migrar de Yarn a pnpm, puedes usar el comando 'pnpm import' que convierte el archivo de registro de Yarn a un archivo de registro de pnpm. Después, es necesario actualizar los scripts en el CI de Yarn a pnpm, usualmente reemplazando 'yarn' por 'pnpm' en los comandos.

pnpm significa 'npm de rendimiento'. Fue creado por Rico Sta. Cruz de Filipinas, y su primera versión fue notablemente más rápida que npm en ese momento.

Si los proyectos y el almacenamiento están en diferentes discos, pnpm puede crear un almacenamiento separado para cada disco. Si no es posible usar hardlinks debido a sistemas de archivos distintos, pnpm copiará los archivos, lo que puede reducir la eficiencia del uso del espacio en disco.

Zoltan Kochan
Zoltan Kochan
31 min
24 Mar, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

pnpm es un gestor de paquetes rápido y eficiente que ha ganado popularidad en 2021 y es utilizado por grandes empresas de tecnología como Microsoft y TikTok. Tiene una estructura única de módulos de nodo aislados que evita conflictos entre paquetes y garantiza que cada proyecto solo tenga acceso a sus propias dependencias. pnpm también ofrece un soporte superior para monorepos con su estructura de módulos de nodo. Resuelve el problema del uso del espacio en disco mediante el uso de un almacenamiento direccionable por contenido, reduciendo el consumo de espacio en disco. pnpm es increíblemente rápido debido a su proceso de instalación y su estructura determinista de módulos de nodo. También permite la vinculación de archivos mediante enlaces duros en lugar de enlaces simbólicos.

1. Introducción a pnpm y su popularidad

Short description:

Hola, mi nombre es Zoltan Kochan y hoy voy a hablar sobre pnpm, que es un gestor de paquetes rápido y eficiente en el uso del espacio en disco. Permítanme presentarme. Trabajo de forma remota para BIT, una empresa que ayuda a los desarrolladores a implementar el desarrollo basado en componentes. Antes de eso, trabajé para Just Answer durante nueve años y he estado desarrollando y manteniendo npm-pm desde 2016. npm, yarn y pnpm son los gestores de paquetes más populares de JavaScript. npm tuvo problemas en el pasado, pero se crearon alternativas como yarn y pnpm. pnpm es un proyecto independiente que soluciona los problemas de npm v3 y ahora es compatible con bit. Tuvo un aumento en popularidad en 2021 y es utilizado por grandes empresas de tecnología como Microsoft y TikTok. pnpm es único porque solo eleva las dependencias necesarias a la raíz de los módulos de nodo.

Hola, mi nombre es Zoltan Kochan y hoy voy a hablar sobre pnpm, que es un gestor de paquetes rápido y eficiente en el uso del espacio en disco.

Antes de eso, permítanme presentarme. Soy Zoltan Kochan. Nací y crecí en Ucrania. Actualmente vivo en Ucrania también. Por ahora estoy a salvo. Trabajo de forma remota para BIT. BIT es una empresa que ayuda a los desarrolladores a implementar el desarrollo basado en componentes. Antes de BIT, trabajé para Just Answer durante nueve años y, al mismo tiempo, desde 2016, he estado desarrollando y manteniendo npm-pm constantemente. Antes de hablar sobre npm-pm, hablemos brevemente sobre otros gestores de paquetes de JavaScript. El gestor de paquetes más popular de node.js o JavaScript es npm, que es el gestor de paquetes oficial del registro de npm. Se envía con node.js y en el pasado npm tuvo muchos problemas, como ser lento, no ser determinista, a veces dar resultados extraños, por lo que se crearon algunas alternativas. Una de las alternativas fue creada por Facebook, probablemente hayas oído hablar de yarn, que es el segundo gestor de paquetes más popular después de npm. Ahora es mantenido por la comunidad y resolvió muchos de los problemas que npm tenía en las versiones 3 y 4. Desde entonces, en la versión 2, yarn ha cambiado para usar plug and play de forma predeterminada, por lo que aunque admite la instalación clásica de módulos de nodo, ahora prefiere usar plug and play, lo cual a muchos les gusta y a muchos no. Personalmente, creo que es una característica genial. Y yarn se envía actualmente con la última versión de Node.js. El tercer gestor de paquetes más popular es pnpm. Es un proyecto completamente independiente, fue creado por colaboradores de código abierto para solucionar los problemas de npm v3. Al mismo tiempo que yarn 2, por lo que pnpm no es como un proyecto nuevo, existe desde que yarn existe, básicamente. Y ahora es compatible con bit, porque trabajo en bit y pnpm se utiliza mucho en bitcli para la gestión de paquetes y pnpm también se envía con nodjs a través de la función corepack de nodjs. Si comparamos estos gestores de paquetes por popularidad, obviamente npm es actualmente el más popular, luego yarn y pnpm es el menos popular, aunque pnpm salió al mismo tiempo que yarn, pero por supuesto Facebook tenía mucho poder de marketing para hacer que yarn fuera muy popular al principio. Sin embargo, aunque pnpm es menos popular por ahora, tuvo un gran aumento en popularidad el año pasado, por lo que en 2021 se descargó pnpm tres veces más que en 2020. Tenemos muchas grandes empresas de tecnología que ya utilizan pnpm, incluso Microsoft utiliza pnpm en algunos de sus proyectos, y el equipo de frontend de TikTok utiliza pnpm. Así que pnpm funciona muy bien y está listo para producción.

Veamos qué hace que pnpm sea único. Cuando instalas una dependencia con npm o Yarn Classic, todas las subdependencias se elevan a la raíz de los módulos de nodo. Como puedes ver en este ejemplo, aunque solo Express está en las dependencias, todos esos otros paquetes también se elevan a la raíz de los módulos de nodo. Por el contrario, pnpm solo coloca Express en la raíz de los módulos de nodo. Por lo tanto, aunque cookie no es una dependencia de tu proyecto, importarla funcionará. Esta es una situación peligrosa.

2. Estructura de módulo de nodo aislado con PMPM

Short description:

Pero, ¿qué sucederá si se lanza una nueva versión de Express y cookie ya no está en sus dependencias? Tu paquete se romperá. PMPM evita este tipo de errores. Con PMPM, tu código solo tiene acceso a los paquetes que se declaran como dependencias de tu proyecto. En este ejemplo, Express es una dependencia directa y KUKI es una dependencia de Express. La ubicación real de Express está dentro de la carpeta .pmpm. Por lo tanto, node.js buscará KUKI en la carpeta de nodemodules dedicada, que se encuentra en .pmpm/express en 4.17.3/nodemodules. Cada paquete está en su propia carpeta aislada con sus propias dependencias.

Tu paquete funcionará bien localmente e incluso funcionará cuando lo instales como una dependencia. Pero, ¿qué sucederá si se lanza una nueva versión de Express y cookie ya no está en sus dependencias? Tu paquete se romperá. PMPM evita este tipo de errores.

Con PMPM, tu código solo tiene acceso a los paquetes que se declaran como dependencias de tu proyecto. ¿Cómo puede PMPM crear una estructura de módulo de nodo aislada?

En este ejemplo, puedes ver que Express es una dependencia directa y KUKI es una dependencia de Express. Como puedes ver, solo Express se coloca en la raíz de la carpeta de nodemodules del proyecto. Y KUKI y en realidad ese Express dentro de nodemodules, es un enlace simbólico, es simplemente un enlace simbólico a una carpeta dentro de la carpeta .pmpm.

Esto funciona porque al buscar dependencias, el algoritmo de resolución de node.js utiliza la ubicación real del paquete como punto de partida para buscar sus dependencias. La ubicación real de Express está dentro de la carpeta .pmpm. Por lo tanto, node.js buscará KUKI en la carpeta de nodemodules dedicada, que se encuentra en .pmpm/express en 4.17.3/nodemodules. Y, por supuesto, puedes ver que KUKI dentro de los nodemodules de Express también es solo un enlace simbólico a una carpeta con la ubicación real de KUKI.

Permíteme mostrarte una demostración rápida. Tengo un proyecto vacío. Ejecuto npm add express. La instalación se ha completado. Veamos qué tenemos aquí. Ignora esto. Esto es algo que elevamos por defecto para solucionar algunos problemas. Pero puedes ver que Express solo se eleva y es un enlace simbólico. La ubicación real de Express está aquí. Y aquí también están todas las demás dependencias directas de Express.

Entonces, puedes ver aquí cookie. Pero cookie en realidad es un enlace simbólico a una carpeta aislada dedicada para el paquete cookie. Puedes verlo aquí. En realidad, cookie está aquí. Y esto es un enlace simbólico. Esto también es un enlace simbólico a esta carpeta del paquete accept. Entonces, esta es la ubicación real de accept. Y estos son las dependencias de accept. Por lo tanto, puedes ver que cada paquete está en su propia carpeta aislada con sus propias dependencias. Volvamos a las diapositivas.

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

Depuración Web Moderna
JSNation 2023JSNation 2023
29 min
Depuración Web Moderna
Top Content
Pocos desarrolladores disfrutan depurando, y la depuración puede ser compleja para las aplicaciones web modernas debido a los múltiples marcos, lenguajes y bibliotecas utilizados. Pero, las herramientas de desarrollo han avanzado mucho en facilitar el proceso. En esta charla, Jecelyn profundizará en el estado moderno de la depuración, las mejoras en DevTools y cómo puedes usarlas para depurar tus aplicaciones de manera confiable.
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Nuestra comprensión del rendimiento y la experiencia del usuario ha evolucionado mucho a lo largo de los años. Las herramientas de desarrollo web necesitan evolucionar de manera similar para asegurarse de que sean centradas en el usuario, accionables y contextuales donde se refiere a las experiencias modernas. En esta charla, Addy te guiará a través de cómo Chrome y otros han estado pensando en este problema y qué actualizaciones han estado haciendo a las herramientas de rendimiento para reducir la fricción para construir grandes experiencias en la web.
Yarn 4 - Gestión Moderna de Paquetes
JSNation 2022JSNation 2022
28 min
Yarn 4 - Gestión Moderna de Paquetes
Top Content
Yarn 4 es la próxima versión mayor de tu gestor de paquetes JavaScript favorito, con un enfoque en rendimiento, seguridad y experiencia del desarrollador. A lo largo de esta charla repasaremos sus nuevas características, cambios importantes y compartiremos nuestros planes a largo plazo para el proyecto.Si solo has oído hablar de Yarn sin probarlo aún, si no estás seguro de por qué la gente hace tanto alboroto con los gestores de paquetes, si te preguntas cómo tu gestor de paquetes puede hacer tu trabajo más sencillo y seguro, ¡esta es la charla perfecta para ti!
Más allá de las listas virtuales: Cómo renderizar 100K elementos con 100s de actualizaciones/seg en React
React Advanced Conference 2021React Advanced Conference 2021
27 min
Más allá de las listas virtuales: Cómo renderizar 100K elementos con 100s de actualizaciones/seg en React
Top Content
Generalmente hay una buena comprensión de cómo renderizar grandes conjuntos de datos (digamos, 100K elementos) usando listas virtuales, ...si permanecen en gran medida estáticos. ¿Pero qué pasa si se están agregando o actualizando nuevas entradas a un ritmo de cientos por segundo? ¿Y si el usuario debería poder filtrarlos y ordenarlos libremente? ¿Cómo podemos mantenernos receptivos en tales escenarios? En esta charla discutimos cómo Flipper introdujo transformaciones FSRW inspiradas en map-reduce para manejar tales escenarios con gracia. Al aplicar las técnicas introducidas en esta charla, las tasas de cuadros de Flipper aumentaron al menos 10 veces y esperamos abrir el código de este enfoque pronto.
Aplicaciones web de alta velocidad: más allá de lo básico
JSNation 2022JSNation 2022
30 min
Aplicaciones web de alta velocidad: más allá de lo básico
Saber cómo ejecutar pruebas de rendimiento en tu aplicación web de manera adecuada es una cosa, y aprovechar esas métricas de manera efectiva es otra. Y ambos aspectos son cruciales para el éxito general de tus esfuerzos de optimización de rendimiento. Sin embargo, a veces puede ser todo un desafío, ya que implica tener un entendimiento preciso de todos los detalles tanto de los datos de rendimiento como de las herramientas de rendimiento. Esta charla arrojará luz sobre cómo superar este desafío y te guiará a través de los obstáculos y trucos del oficio de Chrome DevTools, brindándote una hoja de ruta completa para el análisis y optimización de rendimiento.
Depuración con Chrome DevTools
JSNation Live 2021JSNation Live 2021
11 min
Depuración con Chrome DevTools
Jecelyn compartirá algunos consejos y trucos para ayudarte a depurar tu aplicación web de manera efectiva con Chrome DevTools.

Workshops on related topic

React, TypeScript y TDD
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.