All Resources
Guide
Package ManagementMonorepoDevOps
June 13, 2024

Monorepo Management with pnpm

Organize multiple packages in a single repository with pnpm workspaces.

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.

Curated by

Shyam