monorepo-management logo

monorepo-management

monorepo management

aj-geddes/useful-ai-prompts345installs245stars

SKILL.md

Full skill instructions

Monorepo Management

Table of Contents

Overview

Establish scalable monorepo structures that support multiple interdependent packages while maintaining build efficiency, dependency management, and deployment coordination.

When to Use

  • Multi-package projects
  • Shared libraries across services
  • Microservices architecture
  • Plugin-based systems
  • Multi-app platforms (web + mobile)
  • Workspace dependency management
  • Scaled team development

Quick Start

Minimal working example:

{
  "name": "monorepo-root",
  "version": "1.0.0",
  "private": true,
  "workspaces": ["packages/*", "apps/*"],
  "devDependencies": {
    "lerna": "^7.0.0",
    "turbo": "^1.10.0"
  },
  "scripts": {
    "lint": "npm run lint -r",
    "test": "npm run test -r",
    "build": "npm run build -r",
    "clean": "npm run clean -r"
  }
}

Reference Guides

Detailed implementations in the references/ directory:

GuideContents
Npm Workspaces ConfigurationNpm Workspaces Configuration, Lerna Configuration, Turborepo Configuration, Nx Workspace Configuration
Monorepo Directory StructureMonorepo Directory Structure
Workspace DependenciesWorkspace Dependencies
Lerna CommandsLerna Commands
Turborepo CommandsTurborepo Commands
CI/CD for MonorepoCI/CD for Monorepo
Version Management Across PackagesVersion Management Across Packages

Best Practices

✅ DO

  • Use workspace protocols for dependencies
  • Implement shared tsconfig for consistency
  • Cache build outputs in CI/CD
  • Filter packages in CI to avoid unnecessary builds
  • Hoist common dependencies
  • Document workspace structure
  • Use consistent versioning strategy
  • Implement pre-commit hooks across workspace
  • Test cross-package dependencies
  • Version packages independently when appropriate

❌ DON'T

  • Create circular dependencies
  • Use hardcoded versions for workspace packages
  • Build all packages when only one changed
  • Forget to update lock files
  • Ignore workspace boundaries
  • Create tightly coupled packages
  • Skip dependency management
  • Use different tooling per package