Alejandría

Busca en Alejandría

Herramientas

pnpm

Reutiliza dependencias y acelera instalaciones en Node.js.

01

En pocas palabras

Gestor de paquetes para Node.js que reutiliza archivos de dependencias mediante un almacén compartido para reducir espacio e instalaciones repetidas.

Qué problema resuelve

Duplicación de dependencias, consumo de disco y tiempos de instalación, especialmente entre muchos proyectos.

Cuándo utilizarlo

Aplicaciones JavaScript/TypeScript, proyectos Astro y monorepos. Ejemplo: compartir dependencias entre un portal, una biblioteca de componentes y herramientas internas.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

Cómo funciona

pnpm utiliza un almacén de archivos compartido y enlaces para organizar las dependencias. La estructura limita el acceso accidental a paquetes no declarados y permite reutilizar contenido entre proyectos.

Ejemplo: instalar en desarrollo y CI

# Añadir una dependencia de la aplicación
pnpm add zod

# Preparar CI respetando el archivo versionado
pnpm install --frozen-lockfile

Versiona pnpm-lock.yaml. En un workspace, pnpm-workspace.yaml declara qué directorios forman parte del conjunto de paquetes.

Estructura de node_modules

pnpm guarda cada versión de cada paquete una sola vez en un almacén global y crea enlaces duros hacia él. En node_modules del proyecto solo aparecen las dependencias declaradas; sus dependencias viven en node_modules/.pnpm y se enlazan simbólicamente. El resultado: menos disco, instalaciones más rápidas y errores inmediatos si el código importa algo que no declaró (phantom dependencies).

Workspaces y catálogos

# pnpm-workspace.yaml
packages:
  - 'apps/*'
  - 'packages/*'

catalog:
  react: ^19.1.0
  typescript: ^5.9.0
  zod: ^4.1.0
{
  "name": "@krediya/web",
  "dependencies": {
    "@krediya/ui": "workspace:*",
    "react": "catalog:",
    "zod": "catalog:"
  }
}

workspace:* enlaza el paquete local; catalog: toma la versión definida una sola vez para todo el monorepo, lo que evita tener cinco versiones de React.

Comandos útiles en monorepos

pnpm -r build                          # ejecutar en todos los paquetes
pnpm --filter @krediya/web dev         # solo un paquete
pnpm --filter "...@krediya/ui" test    # ui y todos los que dependen de él
pnpm why lodash                        # quién trae una dependencia
pnpm dedupe                            # reducir duplicados en el lockfile
pnpm audit                             # vulnerabilidades conocidas

Seguridad de la cadena de suministro

  • Desde pnpm 10 los scripts postinstall de las dependencias no se ejecutan por defecto; se autorizan explícitamente con onlyBuiltDependencies.
  • minimumReleaseAge permite no instalar versiones publicadas hace menos de cierto tiempo, una defensa frente a paquetes comprometidos que suelen detectarse en horas.
  • Fija la versión con el campo packageManager de package.json y Corepack, para que CI y desarrolladores usen la misma.

Caché en CI

- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
  with: { node-version: 22, cache: pnpm }
- run: pnpm install --frozen-lockfile

Combina con Turborepo para cachear también los resultados de build y test, y con Renovate para actualizar el catálogo.

Criterios de implementación

Fija una versión de pnpm para el equipo y CI. Al migrar, revisa scripts y dependencias que antes llegaban indirectamente por hoisting. Configura caché del almacén sin sustituir la instalación y validación del lockfile.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.