Template de monorepo con NestJS (backend) y React + Vite (frontend) usando pnpm workspaces y Turborepo para gestión eficiente de dependencias y tareas paralelas.
nestjs-react-monorepo-template/
├── apps/
│ ├── api/ # Backend NestJS + Prisma + SQLite
│ └── client/ # Frontend React + Vite + Tailwind CSS
├── package.json # Scripts principales del monorepo
├── turbo.json # Configuración de Turborepo
└── pnpm-workspace.yaml # Configuración de workspaces
- Node.js: >=18
- pnpm: >=8 (requerido, no usar npm ni yarn)
# Instalar pnpm si no lo tienes
npm install -g pnpm@latest
git clone <tu-repositorio>
cd nestjs-react-monorepo-template
pnpm install
# Copiar el archivo de ejemplo
cp .env.example .env
# Editar las variables según tu configuración
Variables principales:
NODE_ENV=development
PORT=3000 # Puerto del backend
DATABASE_URL="file:./dev.db" # Base de datos SQLite
FRONTEND_URL=http://localhost:5173 # URL del frontend
JWT_SECRET=your_super_secret_jwt_key_here # Cambiar en producción
# Generar cliente de Prisma
pnpm prisma:generate
# Aplicar migraciones a la base de datos
pnpm prisma:push
# (Opcional) Abrir Prisma Studio para ver la BD
pnpm prisma:studio
# Inicia API (puerto 3000) y Client (puerto 5173) en paralelo
pnpm dev
# Solo backend
pnpm --filter=api dev
# Solo frontend
pnpm --filter=client dev
- Frontend: http://localhost:5173
- Backend API: http://localhost:3000
- Swagger Docs: http://localhost:3000/api (si
ENABLE_SWAGGER=true
) - Prisma Studio: http://localhost:5555
# Construir todas las aplicaciones
pnpm build
# Construir para producción (optimizado)
pnpm build:prod
# Vista previa del build completo
pnpm preview:full
# Solo iniciar el backend en producción
pnpm start
# Solo servir el frontend built
pnpm serve:client
# Desarrollo
pnpm prisma:generate # Generar cliente Prisma
pnpm prisma:push # Sincronizar schema con BD (desarrollo)
pnpm prisma:studio # Abrir Prisma Studio
# Migraciones
pnpm prisma:migrate # Crear nueva migración
pnpm prisma:migrate:deploy # Aplicar migraciones (producción)
pnpm prisma:migrate:status # Ver estado de migraciones
pnpm prisma:migrate:reset # Resetear BD y aplicar migraciones
# Utilidades
pnpm prisma:format # Formatear schema.prisma
pnpm prisma:validate # Validar schema
pnpm prisma:seed # Ejecutar seeds
# Ejecutar todos los tests
pnpm test
# Linting en todas las apps
pnpm lint
# Formateo de código
pnpm format
# Limpiar builds
pnpm clean
# Backend tests
pnpm --filter=api test
pnpm --filter=api test:watch
pnpm --filter=api test:e2e
# Frontend tests
pnpm --filter=client test
# Instalar en el root para todo el monorepo
pnpm add -D <package> # DevDependency compartida
pnpm add <package> # Dependency compartida
# Solo para el backend
pnpm add --filter=api <package>
# Solo para el frontend
pnpm add --filter=client <package>
# Para múltiples apps
pnpm add --filter=api --filter=client <package>
- Framework: NestJS 10
- Base de datos: SQLite + Prisma ORM
- Documentación: Swagger/OpenAPI
- Testing: Jest
- Validación: class-validator + class-transformer
- Framework: React 19 + TypeScript
- Build: Vite 7
- Routing: React Router 7
- Styling: Tailwind CSS 4
- Components: Radix UI + Lucide Icons
- Testing: Vitest
- Monorepo: pnpm workspaces + Turborepo
- Linting: ESLint
- Formatting: Prettier
- Type checking: TypeScript
# Aplicar migraciones + Build + Start
pnpm deploy:prod
# TODO: Añadir Dockerfiles y docker-compose
apps/
├── api/ # Backend NestJS
│ ├── src/
│ │ ├── modules/ # Módulos de la aplicación
│ │ ├── common/ # Utilidades compartidas
│ │ │ ├── dto/ # DTOs base
│ │ │ ├── interfaces/ # Interfaces TypeScript
│ │ │ ├── services/ # Servicios compartidos
│ │ │ └── utils/ # Utilidades
│ │ └── main.ts
│ ├── prisma/
│ │ └── schema.prisma # Schema de base de datos
│ └── test/ # Tests E2E
└── client/ # Frontend React
├── src/
│ ├── components/ # Componentes React
│ │ └── ui/ # Componentes UI base
│ ├── pages/ # Páginas de la aplicación
│ ├── routes/ # Configuración de rutas
│ ├── hooks/ # Custom hooks
│ └── lib/ # Utilidades
└── public/ # Assets estáticos
-
Usa conventional commits para los mensajes:
feat: nueva funcionalidad fix: corrección de bug change: cambios que no son feat ni fix docs: cambios en documentación
-
Instala dependencias en el workspace correcto según las reglas del monorepo
-
Ejecuta
pnpm lint
ypnpm test
antes de hacer commit
pnpm prisma:generate
# Cambiar PORT en .env o matar el proceso
lsof -ti:3000 | xargs kill -9 # macOS/Linux
netstat -ano | findstr :3000 # Windows
npm install -g pnpm@latest
# Ver qué está desactualizado
pnpm outdated
# Actualizar todas las dependencias
pnpm update --recursive