CarlosSeijas
← Volver a los blogs

¿Qué es PNPM? El gestor que revoluciona JavaScript

Código
PNPMNPMYarnJavaScriptGestión de paquetes
¿Qué es PNPM? El gestor que revoluciona JavaScript

Mi descubrimiento del año: PNPM

¿Sabes esa sensación cuando tu disco duro se llena de carpetas node_modules que ocupan más espacio que toda tu colección de música? Yo vivía eso todos los días hasta que descubrí PNPM. De una pensé que era solo otro gestor de paquetes más, pero cuando vi los números... quede loco.

Te voy a contar algo que me sorprendio: PNPM puede reducir el espacio que ocupan tus dependencias hasta en un 80%. Sí, asi mismo. Y no solo eso, también es hasta 2 veces más rápido que npm y Yarn. Cuando lo probé por primera vez, literalmente me quedé mirando la terminal pensando que algo había salido mal.

En mi experiencia, una vez que pruebas PNPM, es muy difícil volver atrás. Te cuento todo lo que necesitas saber.

¿Qué rayos es PNPM?

PNPM (Performant NPM) es ese gestor de paquetes que Zoltan Kochan creó en 2016 porque, como muchos de nosotros, estaba harto de los problemas de npm y Yarn. La diferencia principal es que PNPM es más inteligente con el almacenamiento.

Mientras que npm y Yarn duplican los paquetes en cada proyecto (como si fueras a comprar la misma película en DVD para cada habitación de tu casa), PNPM usa un almacén centralizado y enlaces simbólicos. Es como tener una biblioteca central y solo llevar referencias a los libros que necesitas.

Esto significa:

Instalando PNPM: más fácil de lo que piensas

La instalación es súper directa. Te doy varias opciones:

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: igual que NPM pero mejor

Una de las cosas que más me gusta de PNPM es que los comandos son prácticamente iguales a npm. La transición es súper suave.

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: la diferencia es abismal

Aquí es donde PNPM realmente brilla. La diferencia principal está en cómo manejan las dependencias:

Estructura de node_modules

Eficiencia en disco

Velocidad de instalación

Seguridad

PNPM vs Yarn: el duelo de titanes

Yarn fue la primera alternativa seria a npm, pero PNPM va un paso más allá:

Yarn Classic vs PNPM

Yarn Berry (Yarn 2+) vs PNPM

Los números no mienten: benchmarks reales

Aquí tienes los datos que me convencieron:

Tiempo de instalación (proyecto con 1000 dependencias)

GestorInstalación inicialInstalación con caché
npm164s151s
Yarn126s112s
pnpm59s29s

Uso de disco (múltiples proyectos con dependencias comunes)

Gestor1 proyecto5 proyectos10 proyectos
npm1GB5GB10GB
Yarn1GB5GB10GB
pnpm1GB~1.2GB~1.5GB

¿Ves la diferencia? Con 10 proyectos, npm y Yarn ocupan 10GB mientras que PNPM solo 1.5GB. Esto cambió mi vida.

PNPM Workspace: para monorepos que funcionan

Una de las características que más me gusta de PNPM es lo fácil que es configurar monorepos:

¿Qué es un monorepo?

Un monorepo es básicamente tener varios proyectos relacionados en un solo repositorio. Imagina que tienes una app de Next.js y una API de Node.js - con PNPM workspace puedes tener todo en un solo lugar y hacer un solo pnpm install para todo.

Configuración básica

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

Por qué PNPM me conquistó

Las ventajas son obvias una vez que lo pruebas:

Eficiencia

Seguridad

Simplicidad

Los pocos inconvenientes (y cómo los resolví)

No todo es perfecto, pero los problemas son menores:

Compatibilidad con algunas herramientas

Algunos paquetes asumen una estructura plana de node_modules y pueden fallar. La solución es usar el modo node-linker: hoisted en .npmrc para casos problemáticos.

Curva de aprendizaje

Honestamente, es mínima. La mayoría de comandos son idénticos a npm, así que la transición es suave.

Adopción en proyectos grandes

Migrar proyectos grandes requiere planificación, pero comienza con proyectos pequeños y expande gradualmente.

Cómo hacer la migración (es más fácil de lo que piensas)

Migrar a PNPM es generalmente sencillo:

  1. Instala PNPM globalmente
  2. Elimina la carpeta node_modules y los archivos de bloqueo (package-lock.json o yarn.lock)
  3. Ejecuta pnpm install

Para proyectos más complejos, considera:

Mi reflexión final

PNPM cambió mi forma de trabajar con dependencias. Ver cómo mi disco duro pasó de estar siempre lleno a tener espacio libre solo por cambiar de gestor de paquetes fue revelador. Además, esperar menos tiempo en las instalaciones significa más tiempo para programar.

Actualmente pienso que es la mejor opción para manejar dependencias, aunque siempre van surgiendo cosas nuevas. Lo que sí sé es que empresas como Microsoft y Vercel ya lo adoptaron, lo que dice mucho sobre su futuro.

Si buscas:

PNPM merece definitivamente una oportunidad en tu próximo proyecto. ¿Qué esperas para probarlo?

Recursos adicionales

Comentarios

Posts relacionados