CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-pnpm

Fast, disk space efficient package manager for Node.js with hard links, symlinks, and monorepo support

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

workspace-management.mddocs/

Workspace Management

Monorepo and workspace operations with filtering, recursive commands, and cross-package dependency management for complex multi-package projects.

Capabilities

Recursive Commands

Execute commands across all packages in a workspace with dependency awareness and parallel execution.

/**
 * Run commands recursively across workspace packages
 * Executes in topological order by default
 */
pnpm --recursive <command> [options]
pnpm -r <command> [options]
pnpm --multi <command> [options]
pnpm -m <command> [options]

Options:

  • --parallel - Run commands in parallel instead of serial
  • --stream - Stream output from parallel executions
  • --max-workers <number> - Limit concurrent workers
  • --workspace-concurrency <number> - Control workspace concurrency
  • --no-bail - Continue execution despite failures
  • --reporter <type> - Set output reporter for multi-package operations

Usage Examples:

# Install in all workspaces
pnpm -r install

# Build all packages in dependency order
pnpm -r build

# Test all packages in parallel
pnpm -r --parallel test

# Install with limited concurrency
pnpm -r --max-workers=2 install

# Continue testing despite failures
pnpm -r --no-bail test

Package Filtering

Filter workspace packages using patterns, dependencies, and change detection for targeted operations.

/**
 * Filter workspace packages for targeted operations
 * Supports glob patterns, dependency filtering, and change detection
 */
pnpm --filter <pattern> <command> [options]
pnpm -F <pattern> <command> [options]

Filter Patterns:

  • package-name - Exact package name match
  • @scope/* - All packages in scope
  • *api* - Packages containing "api" in name
  • frontend-* - Packages starting with "frontend-"
  • ./packages/* - Packages in specific directory
  • {./packages/frontend} - Specific package path

Dependency Filtering:

  • ...package-name - Package and all its dependencies
  • package-name... - Package and all packages that depend on it
  • ...package-name... - Package, its dependencies, and dependents

Change Detection:

  • ...[HEAD~1] - Packages changed since HEAD~1
  • [HEAD~1] - Only packages changed since HEAD~1 (not dependencies)
  • ...[origin/main] - Packages changed since origin/main

Usage Examples:

# Filter by name pattern
pnpm --filter "*api*" build
pnpm --filter "@myorg/*" test

# Filter by dependencies
pnpm --filter "...@myorg/core" build
pnpm --filter "@myorg/frontend..." test

# Filter by changes
pnpm --filter "...[HEAD~1]" test
pnpm --filter "[origin/main]" build

# Combine filters
pnpm --filter "@myorg/*" --filter "...[HEAD~1]" build

Deploy Operations

Deploy workspace packages with production-optimized dependency resolution.

/**
 * Deploy workspace packages for production
 * Installs only production dependencies with optimized layout
 */
pnpm deploy <target-dir> [options]

Options:

  • --filter <pattern> - Deploy specific packages only
  • --prod - Deploy production dependencies only (default)
  • --dev - Include development dependencies

Usage Examples:

# Deploy current package
pnpm deploy ../deploy/api

# Deploy with filtering
pnpm deploy --filter @myorg/api ../deploy/api

# Deploy multiple packages
pnpm deploy --filter "@myorg/{api,web}" ../deploy/

Workspace Configuration

Configure workspace behavior through pnpm-workspace.yaml and package.json settings.

# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*' 
  - '!**/test/**'

Workspace Root Management:

  • --workspace-root, -w - Include workspace root in operations
  • --include-workspace-root - Include root when filtering
  • --ignore-workspace - Ignore workspace configuration

Usage Examples:

# Include workspace root
pnpm -w add -D typescript

# Install in root and all packages
pnpm -r --include-workspace-root install

# Ignore workspace configuration
pnpm --ignore-workspace install

Workspace Dependency Management

Cross-Package Dependencies

Manage dependencies between workspace packages with workspace protocol.

// package.json dependencies using workspace protocol
{
  "dependencies": {
    "@myorg/utils": "workspace:*",     // Any version from workspace
    "@myorg/core": "workspace:^1.0.0", // Version range from workspace  
    "@myorg/api": "workspace:~2.1.0"   // Specific range from workspace
  }
}

Link Workspace Packages

Control how workspace packages are linked during development.

# Configuration options
--link-workspace-packages          # Link workspace packages (default: true)
--shared-workspace-lockfile       # Use single lockfile for workspace (default: true)
--save-workspace-protocol         # Save with workspace: protocol

Usage Examples:

# Add workspace dependency
pnpm add @myorg/utils --workspace

# Update workspace dependencies
pnpm update --recursive @myorg/core

# Install with workspace protocol
pnpm add @myorg/api --save-workspace-protocol

Workspace Commands

Workspace-Specific Install Behavior

Installation behavior differs in workspace environments with automatic recursive mode.

# Commands that auto-enable recursive mode in workspaces:
pnpm install    # Installs in root and all packages
pnpm import     # Imports lockfiles recursively  
pnpm dedupe     # Deduplicates across workspace

Workspace Filtering Options

Advanced filtering for complex workspace scenarios.

# Workspace-aware filtering
--changed-files-ignore-pattern <pattern>  # Ignore files for change detection
--test-pattern <pattern>                  # Pattern for test files
--fail-if-no-match                       # Fail if no packages match filter

Usage Examples:

# Test only packages with changes, ignoring README updates
pnpm --filter "...[HEAD~1]" --changed-files-ignore-pattern "**/README.md" test

# Build packages matching pattern, fail if none found
pnpm --filter "@myorg/web-*" --fail-if-no-match build

Workspace Script Execution

Execute scripts across workspace with various execution strategies.

# Serial execution (respects dependencies)
pnpm -r run build

# Parallel execution
pnpm -r --parallel run test

# Stream output from parallel runs
pnpm -r --parallel --stream run dev

# Limited concurrency
pnpm -r --parallel --max-workers=3 run build

Workspace Analysis

Package Relationships

Analyze package relationships and dependencies within workspace.

# Show workspace package tree
pnpm list --recursive

# Show why a package is included
pnpm why --recursive lodash

# Show outdated packages across workspace
pnpm outdated --recursive

Workspace State

Commands for understanding workspace structure and state.

# List all workspace packages
pnpm list --recursive --depth=0

# Show workspace root
pnpm root

# Show workspace package locations
pnpm list --recursive --long

Performance Optimization

Concurrent Execution

Control concurrency for optimal performance in workspace operations.

# Control worker processes
--max-workers <number>              # Limit concurrent workers
--workspace-concurrency <number>    # Control workspace operation concurrency

# Execution strategies  
--parallel                          # Run in parallel
--stream                           # Stream output
--reporter append-only             # Optimized output for CI

Selective Operations

Optimize workspace operations by targeting only necessary packages.

# Target changed packages only
pnpm --filter "...[HEAD~1]" build

# Target specific package groups
pnpm --filter "@myorg/{api,web}" test  

# Target by dependency relationships
pnpm --filter "...changed-package" build

Build Management

Approve Builds

Approve build permissions for packages with build scripts.

/**
 * Approve builds for packages
 * Manages build permissions for security
 */
pnpm approve-builds [options]

Usage Examples:

# Approve builds for current package
pnpm approve-builds

# Approve builds in workspace
pnpm approve-builds --recursive

Ignored Builds

Manage packages that are ignored during build operations.

/**
 * Manage ignored builds
 * Controls which packages skip build scripts
 */
pnpm ignored-builds [options]

Usage Examples:

# Show ignored builds
pnpm ignored-builds

# Add package to ignored builds
pnpm ignored-builds add some-package

Recursive Command Aliases

Alternative forms of recursive commands:

# Standard recursive syntax
pnpm --recursive <command>
pnpm -r <command>

# Multi command (alias for recursive)
pnpm --multi <command>
pnpm -m <command>

# Direct recursive command
pnpm recursive <command> 
pnpm multi <command>
pnpm m <command>

Install with Tessl CLI

npx tessl i tessl/npm-pnpm

docs

configuration.md

index.md

package-inspection.md

package-management.md

script-running.md

store-management.md

workspace-management.md

tile.json