pnpm

Gestor de paquetes eficiente en disco - enlaces duros, dependencias estrictas, soporte monorepo rapido

TL;DR

Qué: Gestor de paquetes rápido y eficiente en espacio de disco para Node.js.

Por qué: 2x más rápido que npm, ahorra espacio en disco, dependencias estrictas, excelente soporte monorepo.

Quick Start

Instalar:

# npm
npm install -g pnpm

# Homebrew
brew install pnpm

# Check version
pnpm --version

Uso básico:

pnpm init
pnpm add express
pnpm install
pnpm dev

Cheatsheet

ComandoDescripción
pnpm add pkgAñadir dependencia
pnpm add -D pkgAñadir dependencia dev
pnpm remove pkgEliminar paquete
pnpm installInstalar todas las deps
pnpm updateActualizar paquetes
pnpm run scriptEjecutar script
pnpm dlx pkgEjecutar paquete (como npx)

Gotchas

Instalar paquetes

# Production dependency
pnpm add express

# Dev dependency
pnpm add -D typescript

# Global package
pnpm add -g nodemon

# Specific version
pnpm add [email protected]

# From workspace
pnpm add @myorg/shared --filter @myorg/web

Workspaces (monorepo)

# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*'
# Install all workspace deps
pnpm install

# Run script in specific package
pnpm --filter @myorg/web dev

# Run in all packages
pnpm -r run build

# Add dep to specific package
pnpm add lodash --filter @myorg/utils

# Add workspace dependency
pnpm add @myorg/shared --filter @myorg/web --workspace

Filtrado

# By package name
pnpm --filter @myorg/web dev

# By directory
pnpm --filter ./packages/web dev

# All packages
pnpm -r run test

# Packages with changes
pnpm --filter "...[origin/main]" run test

# Dependencies of package
pnpm --filter "@myorg/web..." run build

Configuración (.npmrc)

# Strict mode (recommended)
strict-peer-dependencies=true
auto-install-peers=true

# Shamefully hoist (compatibility mode)
shamefully-hoist=true

# Store location
store-dir=~/.pnpm-store

# Registry
registry=https://registry.npmmirror.com

Migración desde npm/yarn

# Import from package-lock.json
pnpm import

# Or just delete and reinstall
rm -rf node_modules package-lock.json yarn.lock
pnpm install

Scripts

{
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "test": "vitest"
  }
}
# Run script
pnpm dev
pnpm run build

# Run binary
pnpm exec vitest

# Execute package without installing
pnpm dlx create-react-app my-app

Next Steps