Lab 12: Monorepo Tooling

Time: 30 minutes | Level: Advanced | Docker: docker run -it --rm node:20-alpine sh

Overview

Manage monorepos with npm/yarn/pnpm workspaces, Turborepo concepts, shared packages, dependency hoisting, publishConfig, and changesets for versioning.


Step 1: npm Workspaces Setup

# Create monorepo structure
mkdir /app/monorepo && cd /app/monorepo

# Root package.json with workspaces
cat > package.json << 'EOF'
{
  "name": "my-monorepo",
  "version": "1.0.0",
  "private": true,
  "workspaces": [
    "packages/*",
    "apps/*"
  ],
  "scripts": {
    "build": "npm run build --workspaces",
    "test": "npm run test --workspaces --if-present",
    "lint": "npm run lint --workspaces --if-present"
  }
}
EOF

# Create workspace directories
mkdir -p packages/utils packages/ui apps/web apps/api

Step 2: Shared Package Structure


Step 3: Consuming Shared Packages


Step 4: Dependency Hoisting


Step 5: Turborepo Concepts


Step 6: Changesets for Versioning


Step 7: npm Workspaces Demo


Step 8: Capstone — Workspace Demo

Run verification:

📸 Verified Output:


Summary

Tool
Config File
Key Feature

npm workspaces

"workspaces" in package.json

Built-in, symlinks

yarn workspaces

Same + .yarnrc.yml

Faster installs

pnpm workspaces

pnpm-workspace.yaml

Strict linking, disk efficient

Turborepo

turbo.json

Incremental builds, remote cache

Changesets

.changeset/config.json

Versioning + CHANGELOG

publishConfig

In package.json

Override publish settings

workspace:*

Dependency version

pnpm workspace reference

Last updated