Contexto
Al configurar este mismo portfolio como proyecto hibrido (Next.js + Python tools + templates), necesitaba un package manager que manejara bien la estructura sin inflarse en disco.
Lo que aprendi
pnpm usa un content-addressable store global que evita duplicar paquetes entre proyectos. Cada dependencia se instala una sola vez en disco y se linkea via hard links.
Ventajas concretas sobre npm para monorepos:
- Disco: pnpm usa ~50% menos espacio. Instala una vez, linkea muchas
- Velocidad: Instala 2-3x mas rapido que npm en monorepos
- Strictness: No permite acceso a dependencias no declaradas (phantom dependencies). Si no esta en tu
package.json, no puedes importarlo - Workspaces:
pnpm-workspace.yamles mas simple que la config de npm workspaces - Compatibilidad: Funciona con cualquier registro npm
# Instalar pnpm
corepack enable
corepack prepare pnpm@latest --activate
# Agregar dependencia
pnpm add gray-matter
# Ejecutar script
pnpm run build
# Instalar tool global
pnpm add -g turbo
El punto 3 es clave: npm permite importar cualquier paquete que este en node_modules, aunque no lo hayas declarado. Esto causa bugs silenciosos cuando un paquete transitivo cambia de version o desaparece.