Monorepo configuré avec Turborepo contenant une application Next.js (frontend) et une API NestJS (backend).
.
├── apps/
│ ├── web/ # Application Next.js (frontend)
│ └── api/ # API NestJS (backend)
├── packages/
│ ├── shared-types/ # Types TypeScript partagés
│ └── shared-utils/ # Utilitaires partagés
├── turbo.json # Configuration Turborepo
└── package.json # Configuration racine du monorepo
- Node.js >= 18
- pnpm >= 9
Installer pnpm (si ce n'est pas déjà fait) :
npm install -g pnpmInstaller toutes les dépendances :
pnpm installLancer toutes les applications en mode développement :
pnpm devCela démarre :
- Frontend Next.js sur
http://localhost:5601 - Backend NestJS sur
http://localhost:5600
Construire toutes les applications :
pnpm buildDémarrer toutes les applications en mode production :
pnpm startLancer le linting sur tous les packages :
pnpm lintNettoyer les fichiers de build :
pnpm cleancd apps/web
pnpm dev # Développement
pnpm build # Build
pnpm start # Production
pnpm lint # Lintcd apps/api
pnpm dev # Développement avec watch
pnpm build # Build
pnpm start:prod # Production
pnpm lint # LintLe fichier pnpm-workspace.yaml définit les workspaces du monorepo. Les packages dans apps/* sont gérés comme des workspaces pnpm.
Note : Le fichier pnpm-lock.yaml doit être commité dans le dépôt pour garantir des installations reproductibles.
La configuration Turborepo se trouve dans turbo.json. Elle définit les pipelines de build, dev, lint, etc.
Le dossier packages/ contient les packages partagés entre les applications :
@mkulimachain/shared-types- Types TypeScript partagés (interfaces, types, etc.)@mkulimachain/shared-utils- Fonctions utilitaires partagées
Pour utiliser un package partagé dans une application :
{
"dependencies": {
"@mkulimachain/shared-types": "workspace:*",
"@mkulimachain/shared-utils": "workspace:*"
}
}Puis dans votre code :
import { ApiResponse } from '@mkulimachain/shared-types';
import { formatDate } from '@mkulimachain/shared-utils';Créez des fichiers .env.local dans chaque application si nécessaire :
apps/web/.env.local- Variables pour Next.jsapps/api/.env.local- Variables pour NestJS
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_NAME=mkulimachain
DB_SSL=false
# Application
PORT=5600
NODE_ENV=development
FRONTEND_URL=http://localhost:5601Note : Assurez-vous que PostgreSQL est installé et en cours d'exécution avant de démarrer l'API.
Une fois l'API démarrée, vous pouvez tester la connexion à la base de données :
curl http://localhost:5600/db/status- Turborepo - Build system pour monorepo
- Next.js 16 - Framework React pour le frontend
- NestJS 10 - Framework Node.js pour le backend
- TypeScript - Langage de programmation
- Tailwind CSS - Framework CSS