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.
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
postinstallde las dependencias no se ejecutan por defecto; se autorizan explícitamente cononlyBuiltDependencies. minimumReleaseAgepermite 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
packageManagerdepackage.jsony 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.