Monorepo Library Template
A monorepo library template based on pnpm + TypeScript for creating and managing multi-package JavaScript/TypeScript library projects.
Features
- 📦 Based on pnpm workspace
- 🔄 Unified build process
- 📘 TypeScript support
- 🧪 Jest testing framework
- 📊 Code coverage reports
- 📏 ESLint + Prettier code standards
- 📝 Automatic type declaration file generation
- 🔄 Version management (Changesets)
- 🚀 CI/CD workflows (GitHub Actions)
- 📚 Documentation site (VitePress)
Usage
# Create monorepo library project
npx @rjkt/create-your-app create my-lib-monorepo -t @rjkt/cya-lib-monorepo-templateProject Structure
my-lib-monorepo/
├── .changeset/ # Changesets configuration
├── .github/ # GitHub workflow configuration
├── docs/ # Documentation
│ ├── .vitepress/ # VitePress configuration
│ └── index.md # Documentation homepage
├── packages/ # Subpackages
│ ├── core/ # Core package
│ │ ├── src/ # Source code
│ │ ├── tests/ # Tests
│ │ └── package.json # Package information
│ ├── utils/ # Utilities package
│ │ ├── src/ # Source code
│ │ ├── tests/ # Tests
│ │ └── package.json # Package information
│ └── template/ # Subpackage template
├── .eslintrc.js # ESLint configuration
├── .prettierrc.js # Prettier configuration
├── jest.config.js # Jest configuration
├── tsconfig.json # TypeScript configuration
├── package.json # Root package information
├── pnpm-workspace.yaml # pnpm workspace configuration
└── README.md # Project documentationAvailable Scripts
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Development mode (watch file changes)
pnpm dev
# Run tests
pnpm test
# Code linting
pnpm lint
# Code formatting
pnpm format
# Create changeset
pnpm changeset
# Update versions
pnpm version-packages
# Publish packages
pnpm release
# Start documentation development server
pnpm docs:dev
# Build documentation
pnpm docs:buildCreating New Packages
You can use Create Your App's package creation feature:
# Execute in the project root directory
npx @rjkt/create-your-app package my-new-packageOr manually copy the packages/template directory:
cp -r packages/template packages/my-new-packageThen modify the package name and other information in packages/my-new-package/package.json.
Version Management
This template uses Changesets for version management:
# Create changeset
pnpm changeset
# Update version numbers
pnpm version-packages
# Publish packages
pnpm releaseInter-Package Dependencies
Adding dependencies between subpackages:
# Add dependency on core package in utils package
cd packages/utils
pnpm add @my-scope/core@workspace:*CI/CD Workflows
This template includes the following GitHub Actions workflows:
- CI: Runs tests and builds on Pull Requests
- Release: Publishes packages when merged to the main branch
- Docs: Builds and deploys documentation when merged to the main branch
Custom Configuration
pnpm Configuration
You can modify the workspace configuration in the pnpm-workspace.yaml file.
TypeScript Configuration
You can modify the TypeScript configuration in the root tsconfig.json and in each package's tsconfig.json file.
ESLint Configuration
You can modify the ESLint configuration in the .eslintrc.js file.
Prettier Configuration
You can modify the Prettier configuration in the .prettierrc.js file.
Jest Configuration
You can modify the Jest configuration in the jest.config.js file.
Documentation
This template uses VitePress to build a documentation site, with source files located in the docs directory.
# Start documentation development server
pnpm docs:dev
# Build documentation
pnpm docs:build