Back to blog
by Marc (DevOps Engineer)

Guide Monorepo : Turborepo, Next.js et NestJS

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és
    • packages/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.