L'architecture Monorepo (tout le code dans un seul dépôt Git) est devenue le standard pour les applications fullstack TypeScript.
Notre Stack Idéale
Chez ReposLens, nous utilisons :
- Turborepo : Pour l'orchestration des tâches et le remote caching.
- Pnpm : Pour la gestion rapide des dépendances (workspaces).
- Apps :
apps/web: Next.js (Frontend)apps/api: NestJS (Backend)
- Packages :
packages/database: Prisma schema partagépackages/ui: Composants React partagéspackages/typescript-config: Configs TS partagées
Le grand avantage : Type Safety de bout en bout
L'avantage tueur, c'est le partage de types. Votre DTO (Data Transfer Object) défini dans le backend peut être importé directement dans le frontend. Si vous changez un champ dans l'API, le Frontend ne compile plus. Fini les bugs de production liés à des changements d'API non synchronisés.
Déployer un Monorepo
Le déploiement peut faire peur. L'astuce est d'utiliser Docker avec le "pruning". Exemple de Dockerfile optimisé pour Turbo :
FROM node:18-alpine AS base
FROM base AS builder
WORKDIR /app
RUN npm install turbo --global
COPY . .
RUN turbo prune --scope=web --docker
# ... build steps
Cela permet de ne copier que les fichiers nécessaires pour l'application cible, réduisant la taille de l'image Docker finale.