¿Qué es PNPM? El gestor de paquetes que revoluciona JavaScript

¿Por que se esta utilizando cada vez mas PNPM?
Si desarrollas con JavaScript, seguramente ya te has enfrentado a este problema: tu carpeta node_modules ocupa gigabytes de espacio, la instalación de dependencias tarda muchisimo y ademas acabas con múltiples copias de los mismos paquetes en diferentes proyectos.
¿Y si te dijera que existe una herramienta que soluciona todos estos problemas de una vez? Una que no solo es hasta 2 veces más rápida que npm y Yarn, sino que también puede reducir el espacio de almacenamiento que ocupan tus dependencias hasta en un 80%.
En este artículo, descubrirás qué es pnpm, por qué está ganando tanta popularidad, y cómo puede transformar tu flujo de trabajo como desarrollador. Spoiler: los benchmarks que verás más adelante hablan por sí solos, Nada mas por eso ya vale la pena migrar a pnpm.
¿Qué es PNPM?
PNPM (Performant NPM) es un gestor de paquetes para JavaScript que surge como alternativa a npm y Yarn. Creado por Zoltan Kochan en 2016, pnpm se ha posicionado como una solución innovadora gracias a su enfoque único en la gestión de dependencias.
A diferencia de npm y Yarn, que duplican los paquetes en cada proyecto, pnpm utiliza un almacén centralizado y enlaces simbólicos para compartir código entre proyectos. Este enfoque revolucionario permite:
- Ahorrar espacio de disco: Un solo paquete se almacena una vez, independientemente de cuántos proyectos lo utilicen.
- Acelerar las instalaciones: Al aprovechar los paquetes ya descargados.
- Mantener la correcta estructura de dependencias: Evitando el problema de "dependencias fantasma".
Cómo instalar PNPM en tu sistema
Instalar pnpm es muy facil. A continuación, te muestro como instalarlo en tu compu:
Instalación global con NPM
Si ya tienes npm instalado, puedes usar:
npm install -g pnpm
Instalación mediante scripts oficiales
Para Linux y macOS:
curl -fsSL https://get.pnpm.io/install.sh | sh -
Para Windows (PowerShell):
iwr https://get.pnpm.io/install.ps1 -useb | iex
Verificación de la instalación
Una vez instalado, comprueba que todo está correcto:
pnpm --version
Comandos básicos de PNPM: Empezando a usar PNPM
Los comandos de pnpm son muy similares a los de npm, lo que facilita la transición:
PNPM Install: Instalando dependencias
Para instalar todas las dependencias definidas en tu package.json:
pnpm install
Para añadir un nuevo paquete:
pnpm add nombre-del-paquete
Para dependencias de desarrollo:
pnpm add -D nombre-del-paquete
Otras operaciones comunes
Ejecutar scripts:
pnpm run dev
pnpm start
Actualizar paquetes:
pnpm update
Desinstalar paquetes:
pnpm remove nombre-del-paquete
PNPM vs NPM: ¿Cuáles son las diferencias?
La principal diferencia entre pnpm y npm radica en cómo gestionan las dependencias:
Estructura de node_modules
- NPM: Crea una estructura plana donde todas las dependencias (incluso las transitivas) están en el primer nivel, lo que puede provocar el problema de "dependencias fantasma".
- PNPM: Utiliza una estructura estricta basada en enlaces simbólicos que respeta la jerarquía real de dependencias.
Eficiencia en disco
- NPM: Duplica los paquetes en cada proyecto.
- PNPM: Mantiene un único almacén centralizado y crea enlaces simbólicos, ahorrando hasta un 80% de espacio.
Velocidad de instalación
- NPM: Más lento, especialmente en proyectos grandes.
- PNPM: Significativamente más rápido gracias a su almacén centralizado.
Seguridad
- NPM: Permite que los paquetes accedan a dependencias que no han declarado explícitamente.
- PNPM: Más estricto, solo permite acceder a dependencias declaradas correctamente.
PNPM vs Yarn: Comparativa detallada
Yarn fue la primera alternativa seria a npm, pero pnpm va un paso más allá:
Yarn Classic vs PNPM
- Yarn Classic: Mejora la velocidad respecto a npm y ofrece bloqueo de versiones, pero sigue duplicando paquetes.
- PNPM: Más rápido que Yarn Classic y con un uso de disco mucho más eficiente.
Yarn Berry (Yarn 2+) vs PNPM
- Yarn Berry: Implementa Plug'n'Play (PnP) para mejorar rendimiento, pero cambia radicalmente el comportamiento estándar de Node.js.
- PNPM: Mantiene la compatibilidad tradicional con Node.js mientras ofrece mejoras de rendimiento.
PNPM vs Yarn vs NPM Benchmark: Datos concretos
Los números hablan por sí solos:
Tiempo de instalación (proyecto con 1000 dependencias)
Gestor | Instalación inicial | Instalación con caché |
---|---|---|
npm | 164s | 151s |
Yarn | 126s | 112s |
pnpm | 59s | 29s |
Uso de disco (múltiples proyectos con dependencias comunes)
Gestor | 1 proyecto | 5 proyectos | 10 proyectos |
---|---|---|---|
npm | 1GB | 5GB | 10GB |
Yarn | 1GB | 5GB | 10GB |
pnpm | 1GB | ~1.2GB | ~1.5GB |
Estos datos varían según el entorno, pero la tendencia es clara: pnpm ofrece mejoras significativas tanto en tiempo como en espacio.
PNPM Workspace: Gestionando proyectos monorepo
Una de las características más potentes de pnpm es que es super facil de configurar para monorepos a través de workspaces:
¿Qué es un monorepo?
Un monorepo es un repositorio único que contiene múltiples proyectos relacionados, lo que permite compartir código y coordinar cambios, por ejemplo imagina que tienes una app de Next.js y una API de Node.js, con pnpm workspace puedes tener todo el código en un solo repositorio y no tener que estar bajando dependencias de npm o yarn en cada proyecto, realizas un pnpm install y listo.
Configuración básica de PNPM Workspace
Para configurar un workspace, crea un archivo pnpm-workspace.yaml en la raíz:
packages:
- 'packages/*'
- 'apps/*'
- 'libs/*'
Comandos útiles para workspaces
Instalar dependencias en todos los paquetes:
pnpm install
Ejecutar un script en todos los paquetes:
pnpm -r run build
Añadir una dependencia a un paquete específico:
pnpm --filter package-name add dependency-name
Crear referencias locales entre paquetes:
pnpm --filter package-a add package-b
Ventajas de PNPM: Por qué deberías considerarlo
Las ventajas de pnpm se pueden resumir en:
Eficiencia
- Instalaciones más rápidas
- Menor uso de disco
- Mejor rendimiento en CI/CD
Seguridad
- Estructura de node_modules más estricta
- Prevención de acceso a dependencias no declaradas
- Menor riesgo de vulnerabilidades por "dependencias fantasma"
Simplicidad
- API compatible con npm
- Fácil migración desde npm o Yarn
- Excelente documentación
Posibles inconvenientes y cómo solucionarlos
A pesar de sus ventajas, pnpm puede presentar algunos desafíos:
Compatibilidad con algunas herramientas
Algunos paquetes asumen una estructura plana de node_modules y pueden fallar. Solución: usa el modo node-linker: hoisted en .npmrc para casos problemáticos.
Curva de aprendizaje
Aunque mínima, existe cierta curva de aprendizaje. Solución: la mayoría de comandos son idénticos a npm, asi que por ahi es mas facil la transición.
Adopción en proyectos grandes
Migrar proyectos grandes requiere planificación. Solución: comienza con proyectos pequeños y expande gradualmente.
¿Cómo migrar de NPM o Yarn a PNPM?
Migrar a pnpm es generalmente sencillo:
- Instala pnpm globalmente
- Elimina la carpeta node_modules y los archivos de bloqueo (package-lock.json o yarn.lock)
- Ejecuta pnpm install
Para proyectos más complejos, considera:
- Verificar la compatibilidad de tus paquetes
- Revisar scripts personalizados que puedan asumir npm o Yarn
- Ajustar configuraciones CI/CD
Conclusión: ¿Es PNPM el futuro de la gestión de paquetes en JavaScript?
PNPM representa un avance significativo en la gestión de paquetes JavaScript, ofreciendo mejoras tangibles en velocidad, eficiencia y seguridad. Actualmente pienso que es la mejor opcion de manejar las dependencias, pero siempre van surgiendo cosas nuevas, asi que esperemos a ver que npm y yarn lancen actualizaciones para poder competir. Ademas de que la creciente adopción por parte de empresas como Microsoft, Vercel y muchas otras sugiere que está en camino de convertirse en la opción por default a la hora de elegir un gestor de paquetes.
Si buscas:
- Ahorrar espacio en disco
- Acelerar tus procesos de desarrollo
- Mejorar la seguridad de tus dependencias
- Gestionar eficientemente proyectos monorepo
Para mi PNPM merece definitivamente una oportunidad en el flujo de trabajo de tu proximo proyecto.