Overview
Monorepos simplify management of related packages. pnpm workspaces provide efficient dependency management and code sharing across multiple packages.
Benefits
- Code Sharing: Shared components and utilities
- Single CI/CD: Unified testing and deployment
- Atomic Commits: Changes across packages in one commit
- Efficient Storage: Symlinks reduce disk usage
- Easy Refactoring: Move code between packages
Setup
npm install -g pnpm
mkdir my-monorepo
cd my-monorepo
pnpm init
# Create workspace structure
mkdir -p packages/{core,ui,cli}
Workspace Configuration
# pnpm-workspace.yaml
packages:
- 'packages/*'
- 'apps/*'
Package Setup
// packages/core/package.json
{
"name": "@myapp/core",
"version": "1.0.0",
"exports": {
".": "./dist/index.js"
}
}
// packages/ui/package.json
{
"name": "@myapp/ui",
"version": "1.0.0",
"dependencies": {
"@myapp/core": "workspace:*"
}
}
Common Commands
# Install all dependencies
pnpm install
# Add dependency to specific package
pnpm add lodash -F @myapp/core
# Add internal dependency
pnpm add @myapp/core -F @myapp/ui
# Run script across all packages
pnpm -r run build
# Run script in specific package
pnpm -F @myapp/core run test
# Filter by changed packages
pnpm -r --changed run build
Publishing
# Publish all packages
pnpm -r publish
# Use changesets for versioning
pnpm add -D @changesets/cli
pnpm changeset init
Monorepos can reduce code duplication by 40% while improving developer productivity.