乐闻世界logo
搜索文章和话题

How to configure and use pnpm workspace?

3月6日 23:39

pnpm workspace is pnpm's built-in monorepo solution for managing multiple packages in one repository.

Basic Configuration:

yaml
# pnpm-workspace.yaml packages: - 'packages/*' # All packages under packages directory - 'apps/*' # All apps under apps directory - 'shared/*' # Shared modules

Project Structure Example:

shell
my-monorepo/ ├── pnpm-workspace.yaml ├── package.json ├── pnpm-lock.yaml ├── packages/ │ ├── ui/ │ │ ├── package.json │ │ └── src/ │ └── utils/ │ ├── package.json │ └── src/ └── apps/ ├── web/ │ ├── package.json │ └── src/ └── server/ ├── package.json └── src/

Inter-package Dependencies:

json
// apps/web/package.json { "name": "@my-org/web", "dependencies": { "@my-org/ui": "workspace:*", // Use workspace protocol "@my-org/utils": "workspace:^1.0.0" } }

Workspace Protocol Types:

json
{ "dependencies": { "package": "workspace:*", // Use latest version "package": "workspace:^", // Compatible version "package": "workspace:~", // Approximate version "package": "workspace:^1.0.0" // Specified version range } }

Common Commands:

bash
# Install all dependencies pnpm install # Run command in specific package pnpm --filter @my-org/ui build pnpm -F @my-org/ui build # Shorthand # Run command in all packages pnpm -r build # Recursive execution # Run only in changed packages pnpm -r --filter "...[origin/main]" build # Add inter-package dependency pnpm --filter @my-org/web add @my-org/ui

Advantages Comparison:

Featurepnpm workspaceLernaYarn Workspaces
Built-in Support❌ Need install
Dependency Sharing✅ Hard links✅ Symlinks
Disk EfficiencyHighestAverageMedium
Configuration ComplexitySimpleComplexSimple

Best Practices:

bash
# Use changesets for version management pnpm add -Dw @changesets/cli pnpm changeset init # Release workflow pnpm changeset # Record changes pnpm changeset version # Update versions pnpm -r publish # Publish all packages
标签:PNPM