Back

Una Introducción a pnpm: Una Alternativa Más Rápida a npm y Yarn

Una Introducción a pnpm: Una Alternativa Más Rápida a npm y Yarn

Si alguna vez has visto cómo tu pipeline de CI/CD pasa minutos instalando dependencias o has tenido problemas de espacio en disco en máquinas de desarrollo debido a paquetes duplicados entre proyectos, estás experimentando exactamente los problemas que pnpm fue diseñado para resolver. Este gestor de paquetes de alto rendimiento ofrece un enfoque fundamentalmente diferente para la gestión de dependencias que puede reducir los tiempos de instalación de 2 a 3 veces y disminuir el uso de disco en aproximadamente un 50%.

Puntos Clave

  • pnpm utiliza un almacén direccionable por contenido con enlaces duros para eliminar paquetes duplicados entre proyectos
  • La resolución estricta de dependencias previene dependencias fantasma y detecta errores antes de producción
  • Las velocidades de instalación mejoran de 2 a 3 veces en comparación con npm, con un 50% menos de uso de disco
  • El soporte integrado para espacios de trabajo lo hace ideal para arquitecturas monorepo

Qué Hace Diferente a pnpm

A diferencia de npm y Yarn, que duplican paquetes entre proyectos, pnpm utiliza un almacén direccionable por contenido con enlaces duros para compartir dependencias globalmente. Cuando instalas Express en múltiples proyectos, npm crea copias separadas en cada carpeta node_modules. pnpm lo almacena una vez en ~/.pnpm-store y crea enlaces duros a esa única copia, reduciendo drásticamente el uso de disco mientras mantiene un aislamiento completo entre proyectos.

Esta arquitectura también previene las “dependencias fantasma”—un problema común donde el código puede importar accidentalmente paquetes que no están listados en package.json. Con la resolución estricta de módulos de Node.js de pnpm, si una dependencia no está declarada explícitamente, tu código no puede acceder a ella, detectando errores antes de que lleguen a producción.

Instalación y Configuración

Para Node.js 16.13 o posterior, el método de instalación recomendado utiliza Corepack:

corepack enable
corepack prepare pnpm@latest --activate

Alternativamente, instala vía npm:

npm install -g pnpm

Comandos Esenciales para el Desarrollo Diario

Los comandos principales de pnpm reflejan la sintaxis familiar de npm mientras añaden optimizaciones de rendimiento:

pnpm add express          # Agregar dependencia de producción
pnpm add -D typescript    # Agregar dependencia de desarrollo
pnpm remove lodash       # Eliminar paquete
pnpm update             # Actualizar todas las dependencias
pnpm run build         # Ejecutar script desde package.json

El comando pnpm store proporciona funcionalidad única para gestionar la caché global de paquetes:

pnpm store status      # Verificar estado del almacén
pnpm store prune      # Eliminar paquetes sin referencias

Configuración para Proyectos Modernos

Crea un archivo .npmrc para configurar el comportamiento de pnpm para tu equipo:

strict-peer-dependencies=true
auto-install-peers=true
prefer-offline=true

Estas configuraciones refuerzan los requisitos de dependencias entre pares (peer dependencies), instalan automáticamente las dependencias entre pares (Node.js 16+), y priorizan los paquetes en caché para acelerar las instalaciones.

Configuración de Espacios de Trabajo para Monorepos

Para proyectos monorepo, el soporte de espacios de trabajo de pnpm sobresale en la gestión de múltiples paquetes. Crea un archivo pnpm-workspace.yaml:

packages:
  - 'packages/*'
  - 'apps/*'

Enlaza paquetes del espacio de trabajo usando el protocolo workspace: en package.json:

{
  "dependencies": {
    "@myapp/shared": "workspace:*",
    "@myapp/ui": "workspace:^1.0.0"
  }
}

Ejecuta comandos en todos los paquetes del espacio de trabajo:

pnpm -r build                  # Construir todos los paquetes
pnpm --filter @myapp/api dev   # Ejecutar script dev en paquete específico

Optimización de CI/CD

Para GitHub Actions, utiliza la acción oficial de pnpm con Node.js 22 LTS:

- uses: pnpm/action-setup@v4
  with:
    version: 9
- uses: actions/setup-node@v4
  with:
    node-version: 22
    cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm test

Para GitLab CI, configura el almacenamiento en caché para maximizar la optimización de CI/CD:

image: node:22

before_script:
  - corepack enable
  - corepack prepare pnpm@latest --activate

cache:
  key: pnpm-store-$CI_COMMIT_REF_SLUG
  paths:
    - .pnpm-store

install:
  script:
    - pnpm config set store-dir .pnpm-store
    - pnpm install --frozen-lockfile

La bandera --frozen-lockfile asegura compilaciones reproducibles al fallar si pnpm-lock.yaml no coincide con package.json, previniendo desviaciones entre entornos de desarrollo y producción.

Rendimiento en la Práctica

Los equipos que migran desde npm típicamente ven velocidades de instalación mejorar de 2 a 3 veces debido a la estrategia eficiente de enlazado de pnpm. Un proyecto de tamaño mediano con 500 dependencias podría tomar 60 segundos con npm pero solo 20-25 segundos con pnpm. Los ahorros de disco son aún más dramáticos—los desarrolladores que trabajan en múltiples proyectos a menudo recuperan 5-10GB de espacio a medida que se eliminan los paquetes duplicados.

Conclusión

pnpm cumple su promesa de una gestión de dependencias más rápida y eficiente a través de una arquitectura innovadora en lugar de mejoras incrementales. Su resolución estricta de dependencias detecta errores tempranamente, mientras que las capacidades de configuración de espacios de trabajo lo hacen ideal para arquitecturas monorepo modernas. Ya sea que estés optimizando pipelines de CI/CD o gestionando aplicaciones full-stack complejas, pnpm proporciona el rendimiento y la confiabilidad que los equipos de desarrollo necesitan sin sacrificar la compatibilidad con el ecosistema npm existente.

Preguntas Frecuentes

pnpm aplica una resolución estricta de dependencias entre pares por defecto. No instalará automáticamente dependencias entre pares a menos que habilites auto-install-peers en tu configuración. Esto previene conflictos de versiones y asegura que tu proyecto declare explícitamente todas las dependencias requeridas.

Sí, pnpm es completamente compatible con proyectos de npm y Yarn. Simplemente ejecuta pnpm import en el directorio de tu proyecto para generar un archivo pnpm-lock.yaml desde tu archivo de bloqueo existente. Todos tus scripts de npm y configuraciones de package.json funcionan sin modificación.

Los paquetes permanecen en el almacén global incluso después de desinstalarlos de los proyectos. Esto permite la reinstalación instantánea si se necesitan más tarde. Ejecuta pnpm store prune periódicamente para eliminar paquetes sin referencias y liberar espacio en disco.

Absolutamente. pnpm está listo para producción y es utilizado por empresas importantes. Usa pnpm install --frozen-lockfile en producción para asegurar versiones exactas de dependencias. Las instalaciones determinísticas y la resolución estricta de dependencias en realidad hacen que los despliegues sean más confiables que con gestores de paquetes tradicionales.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay