Co-authored-by: Jason Woltje <jason@diversecanvas.com> Co-committed-by: Jason Woltje <jason@diversecanvas.com>
97 lines
2.5 KiB
Markdown
97 lines
2.5 KiB
Markdown
# Monorepo Structure
|
|
|
|
This quality-rails monorepo template supports the following structure:
|
|
|
|
```
|
|
monorepo/
|
|
├── apps/
|
|
│ ├── web/ # Next.js frontend
|
|
│ │ ├── package.json
|
|
│ │ ├── tsconfig.json # extends ../../tsconfig.base.json
|
|
│ │ └── .eslintrc.js # extends ../../.eslintrc.strict.js
|
|
│ └── api/ # NestJS backend
|
|
│ ├── package.json
|
|
│ ├── tsconfig.json
|
|
│ └── .eslintrc.js
|
|
├── packages/
|
|
│ ├── shared-types/ # Shared TypeScript types
|
|
│ ├── ui/ # Shared UI components
|
|
│ └── config/ # Shared configuration
|
|
├── .husky/
|
|
│ └── pre-commit
|
|
├── .lintstagedrc.js # Multi-package aware
|
|
├── .eslintrc.strict.js # Root ESLint config
|
|
├── tsconfig.base.json # Base TypeScript config
|
|
├── turbo.json # TurboRepo configuration
|
|
├── pnpm-workspace.yaml # pnpm workspaces
|
|
└── package.json # Root package with scripts
|
|
```
|
|
|
|
## Package-Specific Configs
|
|
|
|
Each package extends the root configuration:
|
|
|
|
**apps/web/tsconfig.json:**
|
|
```json
|
|
{
|
|
"extends": "../../tsconfig.base.json",
|
|
"compilerOptions": {
|
|
"lib": ["dom", "dom.iterable", "ES2022"],
|
|
"jsx": "preserve",
|
|
"noEmit": true,
|
|
"paths": {
|
|
"@/*": ["./*"]
|
|
}
|
|
},
|
|
"include": ["**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
"exclude": ["node_modules", ".next"]
|
|
}
|
|
```
|
|
|
|
**apps/api/tsconfig.json:**
|
|
```json
|
|
{
|
|
"extends": "../../tsconfig.base.json",
|
|
"compilerOptions": {
|
|
"module": "commonjs",
|
|
"outDir": "./dist",
|
|
"rootDir": "./src",
|
|
"emitDecoratorMetadata": true,
|
|
"experimentalDecorators": true
|
|
},
|
|
"include": ["src/**/*"],
|
|
"exclude": ["node_modules", "dist", "test"]
|
|
}
|
|
```
|
|
|
|
## Running Commands
|
|
|
|
**All packages:**
|
|
```bash
|
|
npm run lint # Lint all packages
|
|
npm run type-check # Type check all packages
|
|
npm run test # Test all packages
|
|
npm run build # Build all packages
|
|
```
|
|
|
|
**Single package:**
|
|
```bash
|
|
npm run lint --workspace=apps/web
|
|
npm run dev --workspace=apps/api
|
|
```
|
|
|
|
**With TurboRepo:**
|
|
```bash
|
|
turbo run build # Build with caching
|
|
turbo run dev --parallel # Run dev servers in parallel
|
|
```
|
|
|
|
## Pre-Commit Enforcement
|
|
|
|
lint-staged automatically detects which packages contain modified files and runs:
|
|
- ESLint on changed files
|
|
- TypeScript check on affected packages
|
|
- Prettier on all changed files
|
|
|
|
Only runs checks on packages that have changes (efficient).
|