Comparados los gestores de paquetes de JavaScript: ¿Yarn, npm o pnpm?

En el desarrollo de aplicaciones modernas, no escribimos todo desde cero. En su lugar, preferimos usar paquetes de código abierto existentes. Cada uno de estos paquetes tiene sus propios mantenedores y comunidad. Por lo tanto, el uso de un paquete en nuestros proyectos nos brinda algunas ventajas, como un desarrollo más rápido, acceso a actualizaciones nuevas y regulares y una mejor seguridad que el script creado a medida.

Es común que un paquete dependa de muchos otros paquetes para funcionar correctamente. Lodash también depende de varios paquetes, pero el propio lodash también depende de varios paquetes. En otras palabras, las dependencias anidadas a veces pueden volverse tan complejas que no pueden manejar la administración de dependencias manualmente.

Aquí es cuando un gestor de paquetes es extremadamente útil. Los gestores de paquetes son herramientas que manejan automáticamente las dependencias de un proyecto.

Por ejemplo, un administrador de paquetes puede instalar paquetes nuevos o actualizar paquetes existentes con un solo comando. Porque todo está automatizado, así que no hay posibilidad de error humano. Como desarrolladores de JavaScript, tenemos acceso a varios gestores de paquetes. Pero, en esta guía, compararemos los tres más populares:

  • npm
  • Yarn
  • pnpm

Descripción general de los gestores de paquetes

npm fue el primer gestor de paquetes en introducir los conceptos de protocolo de registro y estándares de embalaje. Fue lanzado en 2010 y adoptado oficialmente por the Node.equipo de js poco después, que fue el punto de inflexión para npm.

Después del éxito masivo de Node.js, npm también recibió tracción de la comunidad de desarrolladores. Ofrece un registro en línea para paquetes JavaScript, así como una herramienta de línea de comandos que funciona con el registro para instalar y actualizar dependencias.

Pero hay pocos inconvenientes de npm que desencadenaron el desarrollo de Yarn y pnpm. Por ejemplo, el mecanismo nacional de prevención es significativamente más lento que sus homólogos. También tiene un historial de vulnerabilidades de seguridad graves.

Así que, las grandes empresas tecnológicas como Facebook y Google dudaban en seguir usando npm. A su vez, unieron esfuerzos para desarrollar una mejor versión de npm y llamarlo Hilado. Mientras tanto, el desarrollador ucraniano Zoltan Kochan desarrolló pnpm.

Características de npm, Yarn y pnpm

Todos estos gestores de paquetes son de código abierto, lo que significa que tiene acceso completo para comprobar el funcionamiento interno de cada uno. A veces, esto es incluso un requisito en el desarrollo de aplicaciones a nivel empresarial.

Beneficios de npm:

  1. Genera automáticamente un archivopackage-lock.json. Es útil comprometerse con un sistema de control de versiones. De esta manera, otros desarrolladores pueden instalar fácilmente las dependencias en sus máquinas locales
  2. Administrar dependencias locales o globales con facilidad
  3. npm está bien equipado para manejar múltiples versiones de dependencias
  4. Tiene un registro oficial que tiene más paquetes que pypi, rubygems o packagist

Beneficios de Yarn:

  1. Yarn corrige muchos problemas que aparecen en un Monorrepo. Por ejemplo, si mantiene varios paquetes en el mismo repositorio y todos tienen un archivo package.json separado, puede actualizar todos los paquetes fácilmente con Yarn, gracias a su concepto de espacios de trabajo que pueden instalar dependencias de todos los paquetes en un repositorio, todo de una sola vez. Con npm, debe ejecutar el comando npm install manualmente dentro de cada carpeta de paquetes.
  2. Yarn hace uso de un mecanismo de caché sin conexión, lo que significa que cuando instala un paquete por primera vez, Yarn lo agrega a una carpeta de caché en ~/.yarn-cache. Por lo tanto, la próxima vez que necesite este paquete, Yarn lo recuperará de la caché local en lugar de realizar una solicitud HTTP al servidor. Esta pequeña mejora aumenta significativamente el rendimiento de Yarn en comparación con npm
  3. Yarn también hace uso de un archivo de bloqueo llamado yarn.lock, por lo que sus proyectos funcionarán correctamente para todos los compañeros de equipo. Este concepto también se conoce como algoritmo de instalación determinista
  4. Está repleto de un comprobador de licencias incorporado que puede ser útil en diferentes escenarios cuando está desarrollando aplicaciones
  5. A diferencia de npm, Yarn utiliza un enfoque llamado descargas paralelas. Permite a Yarn utilizar más recursos para acelerar el proceso de compilación
  6. Puede reintentar automáticamente la solicitud HTTP en caso de fallo. Esta función es particularmente útil cuando se enfrenta a problemas temporales de Internet

Beneficios de pnpm:

  1. Es compatible con npm, pero también ofrece un uso y una velocidad significativamente mejores del espacio en disco
  2. pnpm instala todos los paquetes en una sola ubicación y luego usa enlaces simbólicos para hacer referencia a ellos. Introduce un concepto completamente nuevo llamado sistema de almacenamiento direccionable de contenido que permite a pnpm detectar la diferencia entre archivos. A su vez, no duplica archivos sin cambios en dos versiones diferentes de un paquete
  3. Su última versión, 5.8.0, introduce un nuevo ajuste similar a Yarn-bash llamado emulador de shell, un entorno de shell multiplataforma
  4. pnpm tiene un estricto mecanismo de control de acceso, lo que significa que un paquete solo puede acceder a las dependencias que se definen en su package.json archivo

Comparación de gestor de paquetes

Facilidad de uso

npm, Yarn y pnpm ofrecen comandos casi idénticos para sus operaciones, y todos son fáciles de usar. Aquí hay un ejemplo de sus comandos de uso común:

npm Hilo pnpm
npm install hilados de instalar pnpm instalar
mecanismo nacional de prevención de actualización hilo de actualización pnpm actualización

Velocidad

No hay ninguna coincidencia para pnpm cuando se trata de la velocidad y el rendimiento de estos gestores de paquetes. De acuerdo con un punto de referencia de diferentes casos de uso, pnpm ha mostrado velocidades de rendimiento hasta 3 veces más rápidas que npm.

Las velocidades de Hilo y npm son comparables. En algunos casos, Yarn tiene una ventaja significativa sobre npm, pero hay escenarios en los que npm es una opción más adecuada. Por ejemplo, si realizamos una operación de instalación simplemente usando node_modules y omitimos la funcionalidad cache y lock file, npm podría ofrecer una velocidad 5 veces superior. Del mismo modo, si usamos las tres funcionalidades, Yarn podría aumentar su rendimiento y se vuelve 11 veces más rápido que npm.

Seguridad

La principal ventaja de Yarn over npm es que verifica la integridad de cada paquete utilizando sumas de comprobación. El proceso de verificación se realiza antes de ejecutar cualquier código del paquete, por lo que descarta cualquier posibilidad de vulnerabilidad de secuestro de paquetes.

Por otro lado, npm es un poco más indulgente cuando se trata de trabajar con paquetes defectuosos. Sigue evolucionando para ofrecer las mejores prácticas en materia de seguridad. Sin embargo, el mnp generalmente tiene una mala reputación en términos de seguridad.

En el pasado, había algunas vulnerabilidades de seguridad en npm que afectaban directamente a muchos proyectos. Por ejemplo, en la versión 5.7.0 de npm, cuando ejecuta el comando sudo npm en un sistema operativo (SO) basado en Linux, existe la posibilidad de cambiar la propiedad de los archivos del sistema, lo que hace que el sistema operativo no se pueda usar.

De manera similar, otro incidente de robo de bitcoins ocurrió en 2018. Básicamente, el Nodo popular.el paquete js EventStream agregó una dependencia maliciosa flatmap-stream en su versión 3.3.6. Este paquete malicioso estaba repleto de una carga útil cifrada que intenta robar bitcoins de la máquina del desarrollador.

pnpm combina los atributos positivos de npm y Yarn para proporcionar una seguridad aún mejor. También implementa un estricto mecanismo de control de acceso que enlaza un paquete para que solo use sus propias dependencias definidas en su archivo package.json.

Estabilidad

npm, Yarn y pnpm han pasado por varias fases en los últimos años. Con el tiempo, su base de código ha madurado porque han recibido toneladas de contribuciones de la comunidad de código abierto.

Y, con el paso del tiempo, aparecen nuevos conceptos e ideas que podrían introducir cambios rompedores. En el momento de escribir esta guía, todos estos gestores de paquetes están en buena forma y puede usarlos en sus proyectos sin ningún problema.

Yarn está respaldado por Facebook y Google, npm está respaldado por Microsoft y Node.js, y pnpm está desarrollado principalmente por un individuo, aunque ahora tiene más de 75 colaboradores, por lo que puede confiar en estos administradores de paquetes para crear su próximo proyecto.

Soporte para monorepos

Los monorepos son los preferidos principalmente por las grandes empresas tecnológicas para almacenar y administrar sus bases de código masivas. el mecanismo nacional de prevención se diseñó únicamente para gestionar proyectos individuales. A partir de ahora, no tiene ninguna funcionalidad para admitir monorepos. Pero tanto Yarn como pnpm tienen soporte completo para monorepos, gracias a su concepto de espacios de trabajo.

Deterministic-el archivo de bloqueo

Los tres gestores de paquetes están empaquetados con la funcionalidad del archivo de bloqueo. Permite a diferentes desarrolladores instalar exactamente la misma copia del proyecto. npm utiliza un archivo package-lock.json, Yarn utiliza yarn.lock, y pnpm utiliza pnpm-lock.yaml.

Conclusión

Si está buscando una solución que le brinde una mejor velocidad y un uso de memoria eficiente, debe considerar seriamente el uso de pnpm.

Si está manejando monorepos, puede usar pnpm o Yarn para hacerlo. Sin embargo, ten en cuenta que Yarn envía datos de uso a Facebook, lo que puede no hacer que Yarn sea una opción adecuada en algunos escenarios.

Yarn tampoco es compatible con la versión 5 de Node.js. En este sentido, npm es una opción preferida para Node.proyectos basados en js porque es recomendado por el nodo.equipo js. Estos días, Node.js viene con npm de forma predeterminada.

Con npm, debe considerar su historial con problemas de seguridad, que desencadenaron el desarrollo de Yarn, que también se creó para resolver muchos emisores que estaban presentes en npm. Por lo tanto, si te preocupa la seguridad de tus proyectos, considera usar Yarn en lugar de npm.

LogRocket: Depurar errores de JavaScript es más fácil al comprender el contexto

El código de depuración siempre es una tarea tediosa. Pero cuanto más entiendas tus errores, más fácil será arreglarlos.

LogRocket le permite comprender estos errores de formas nuevas y únicas. Nuestra solución de monitoreo de frontend rastrea la interacción del usuario con sus frontends de JavaScript para brindarle la capacidad de averiguar exactamente qué hizo el usuario que provocó un error.

Banner de prueba gratuita del panel de control de LogRocket

LogRocket registra los registros de la consola, los tiempos de carga de las páginas, las rutas apiladas, las solicitudes/respuestas de red lentas con encabezados y cuerpos, metadatos del navegador y registros personalizados. Comprender el impacto de su código JavaScript nunca será más fácil!

Pruébalo gratis.

Related Posts

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *