TL;DR
What: Fast, disk space efficient package manager for Node.js.
Why: 2x faster than npm, saves disk space, strict dependencies, great monorepo support.
Quick Start
Install:
# npm
npm install -g pnpm
# Homebrew
brew install pnpm
# Check version
pnpm --version
Basic usage:
pnpm init
pnpm add express
pnpm install
pnpm dev
Cheatsheet
| Command | Description |
|---|---|
pnpm add pkg | Add dependency |
pnpm add -D pkg | Add dev dependency |
pnpm remove pkg | Remove package |
pnpm install | Install all deps |
pnpm update | Update packages |
pnpm run script | Run script |
pnpm dlx pkg | Execute package (like npx) |
Gotchas
Installing packages
# 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
Filtering
# 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
Configuration (.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
Migration from 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
- pnpm Documentation - Official docs
- Workspaces - Monorepo guide
- Filtering - Package selection
- pnpm vs npm vs yarn - Benchmarks