turborepo-monorepo

安装量: 192
排名: #4464

安装

npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill turborepo-monorepo

Turborepo Monorepo Overview Provides comprehensive guidance for working with Turborepo monorepos in TypeScript/JavaScript projects. Turborepo is a high-performance build system written in Rust that optimizes task execution through intelligent caching, parallelization, and dependency graph analysis. This skill covers workspace creation, task configuration, framework integration (Next.js, NestJS, Vite), testing setup, CI/CD pipelines, and performance optimization. When to Use Use this skill when: Creating a new Turborepo workspace or initializing in an existing project Configuring turbo.json tasks with proper dependencies and outputs Setting up Next.js or NestJS applications in a monorepo Configuring Vitest or Jest testing pipelines Implementing CI/CD workflows (GitHub Actions, CircleCI, GitLab CI) Setting up remote caching or Vercel Remote Cache Optimizing build times and cache hit ratios Managing package configurations for specific apps/libs Debugging task dependency issues Migrating from other monorepo tools to Turborepo Trigger phrases: "create Turborepo workspace", "Turborepo monorepo", "turbo.json config", "Turborepo Next.js", "Turborepo NestJS", "Turborepo CI/CD", "Vitest Turborepo" Instructions Workspace Creation Create a new workspace:

Using pnpm (recommended)

pnpm create turbo@latest my-workspace

Using npm

npm create turbo@latest my-workspace

Using yarn

yarn create turbo my-workspace Initialize in an existing project: pnpm add -D -w turbo Create turbo.json in root: { "$schema" : "https://turborepo.dev/schema.json" , "pipeline" : { "build" : { "dependsOn" : [ "^build" ] , "outputs" : [ "dist/" , ".next/" ] } , "lint" : { "outputs" : [ ] } , "test" : { "dependsOn" : [ "build" ] , "outputs" : [ "coverage/" ] } } } Add scripts to root package.json: { "scripts" : { "build" : "turbo run build" , "dev" : "turbo run dev" , "lint" : "turbo run lint" , "test" : "turbo run test" , "clean" : "turbo run clean" } } Task Configuration Configure task dependencies: { "pipeline" : { "build" : { "dependsOn" : [ "^build" ] , "outputs" : [ "dist/" ] } , "test" : { "dependsOn" : [ "build" ] , "outputs" : [ "coverage/**" ] } , "lint" : { "outputs" : [ ] } } } Run tasks across packages:

Run task for all packages

turbo run build

Run multiple tasks

turbo run lint test build

Run for specific package

turbo run build --filter = web Use transit nodes for parallel type checking: { "pipeline" : { "transit" : { "dependsOn" : [ "^transit" ] } , "typecheck" : { "dependsOn" : [ "transit" ] , "outputs" : [ ] } } } Framework Integration Next.js app configuration: { "pipeline" : { "build" : { "dependsOn" : [ "^build" ] , "outputs" : [ ".next/" , "!.next/cache/" ] , "env" : [ "NEXT_PUBLIC_" ] } } } See references/nextjs-config.md for complete Next.js setup. NestJS API configuration: { "pipeline" : { "build" : { "dependsOn" : [ "^build" ] , "outputs" : [ "dist/" ] } , "start:dev" : { "cache" : false , "persistent" : true } } } See references/nestjs-config.md for complete NestJS setup. Testing Setup Vitest configuration: { "pipeline" : { "test" : { "outputs" : [ ] , "inputs" : [ "$TURBO_DEFAULT$" , "vitest.config.ts" ] } , "test:watch" : { "cache" : false , "persistent" : true } } } Run affected tests: turbo run test --filter = [ HEAD^ ] See references/testing-config.md for complete testing setup. Package Configurations Create package-specific turbo.json: { "extends" : [ "//" ] , "tasks" : { "build" : { "outputs" : [ "$TURBO_EXTENDS$" , ".next/*" ] } } } See references/package-configs.md for detailed package configuration patterns. CI/CD Setup GitHub Actions basic workflow: - name : Install dependencies run : pnpm install - name : Run tests run : pnpm run test - - filter= [ HEAD^ ] - name : Build run : pnpm run build - - filter= [ HEAD^ ] Remote cache setup:

Login to Vercel

npx turbo login

Link repository

npx turbo
link
See
references/ci-cd.md
for complete CI/CD setup examples.
Task Properties Reference
Property
Description
Example
dependsOn
Tasks that must complete first
["^build"]
- dependencies first
outputs
Files/folders to cache
["dist/**"]
inputs
Files for cache hash
["src/*/.ts"]
env
Environment variables affecting hash
["DATABASE_URL"]
cache
Enable/disable caching
true
or
false
persistent
Long-running task
true
for dev servers
outputLogs
Log verbosity
"full"
,
"new-only"
,
"errors-only"
Dependency Patterns
^task
- Run task in dependencies first (topological order)
task
- Run task in same package first
package#task
- Run specific package's task
Filter Syntax
Filter
Description
web
Only web package
web...
web + all dependencies
...web
web + all dependents
...web...
web + deps + dependents
[HEAD^]
Packages changed since last commit
./apps/*
All packages in apps/
Best Practices
Performance Optimization
Use specific outputs
- Only cache what's needed
Fine-tune inputs
- Exclude files that don't affect output
Transit nodes
- Enable parallel type checking
Remote cache
- Share cache across team/CI
Package configurations
- Customize per-package behavior
Caching Strategy
{
"pipeline"
:
{
"build"
:
{
"outputs"
:
[
"dist/**"
]
,
"inputs"
:
[
"$TURBO_DEFAULT$"
,
"!README.md"
,
"!*/.md"
]
}
}
}
Task Organization
Independent tasks
- No
dependsOn
lint, format, spellcheck
Build tasks
-
dependsOn: ["^build"]
build, compile
Test tasks
-
dependsOn: ["build"]
test, e2e
Dev tasks
-
cache: false, persistent: true
dev, watch Workspace Structure my-workspace/ ├── apps/ │ ├── web/ # Next.js app │ └── api/ # NestJS backend ├── packages/ │ ├── ui/ # React component library │ └── config/ # Shared configs ├── turbo.json ├── package.json └── pnpm-workspace.yaml Common Issues Tasks not running in order Problem: Tasks execute in wrong order Solution: Check dependsOn configuration { "build" : { "dependsOn" : [ "^build" ] } } Cache misses on unchanged files Problem: Cache invalidating unexpectedly Solution: Review globalDependencies and inputs { "globalDependencies" : [ "tsconfig.json" ] , "pipeline" : { "build" : { "inputs" : [ "$TURBO_DEFAULT$" , "!*.md" ] } } } Type errors after cache hit Problem: TypeScript errors not caught due to cache Solution: Use transit nodes for type checking { "transit" : { "dependsOn" : [ "^transit" ] } , "typecheck" : { "dependsOn" : [ "transit" ] } } Examples Example 1: Create New Workspace Input: "Create a Turborepo with Next.js and NestJS" pnpm create turbo@latest my-workspace cd my-workspace

Add Next.js app

pnpm add next react react-dom -F apps/web

Add NestJS API

pnpm add @nestjs/core @nestjs/common -F apps/api Example 2: Configure Testing Pipeline Input: "Set up Vitest for all packages" { "pipeline" : { "test" : { "dependsOn" : [ "build" ] , "outputs" : [ "coverage/**" ] , "inputs" : [ "$TURBO_DEFAULT$" , "vitest.config.ts" ] } , "test:watch" : { "cache" : false , "persistent" : true } } } Example 3: Run Affected Tests in CI Input: "Only test changed packages in CI" pnpm run test --filter = [ HEAD^ ] Example 4: Debug Cache Issues Input: "Why is my cache missing?"

Dry run to see what would be executed

turbo run build --dry-run --filter = web

Show hash inputs

turbo run build
--force
--filter
=
web
Constraints and Warnings
Node.js 18+
is required for Turborepo
Package manager field
required in root
package.json
Outputs must be specified
for caching to work
Persistent tasks
cannot have dependents
Windows
WSL or Git Bash recommended Remote cache requires Vercel account or self-hosted solution Large monorepos may need increased concurrency settings Reference Files For detailed guidance on specific topics, consult: Topic Reference File turbo.json template references/turbo.json Next.js integration references/nextjs-config.md NestJS integration references/nestjs-config.md Vitest/Jest/Playwright references/testing-config.md GitHub/CircleCI/GitLab CI references/ci-cd.md Package configurations references/package-configs.md
返回排行榜