Comment organiser un projet Next.js en architecture monorepo ? Avantages, outils, structure de dossiers, et conseils issus de mon expérience sur des applications à fort volume.

Quand on développe une application Next.js qui va grandir dans le temps — avec plusieurs modules, backends, composants partagés — une architecture monorepo devient rapidement une nécessité. Après plusieurs projets, je partage ici mes bonnes pratiques pour structurer un projet Next.js en monorepo de manière propre, maintenable et scalable.
Un monorepo bien structuré permet aussi de travailler à plusieurs sans écraser les autres modules.
projectReferencesmy-app/
├── apps/
│ ├── web/ → l'app Next.js principale
│ └── admin/ → interface d'administration
├── packages/
│ ├── ui/ → composants partagés (design system)
│ ├── config/ → config Tailwind, ESLint, etc.
│ └── db/ → ORM, schémas Drizzle, helpers DB
├── .gitignore
├── package.json
├── turbo.json
└── tsconfig.json
Chaque sous-projet peut avoir ses propres dépendances tout en accédant aux packages communs via les workspaces.
Le dossier packages/ui contient des composants comme <Button />, <Card />, <Layout />, tous écrits en TypeScript et stylés avec Tailwind.
// packages/ui/button.tsx
export function Button({ children }) {
return (
<button className="rounded-xl px-4 py-2 bg-orange-500 text-white">
{children}
</button>
);
}
Ensuite, tu l'importes depuis apps/web :
import { Button } from "@ui/button";
Dans packages/types, je place tous mes types partagés entre front, back et API. Ça permet d'avoir un typage strict, notamment pour les données récupérées avec Drizzle ORM.
Pour les tests, chaque app peut embarquer son propre Jest/Vitest, ou on peut mutualiser des helpers dans packages/test-utils.
J'accompagne les startups et les projets web ambitieux dans leur structuration technique, que ce soit en création ou refonte.
© 2025 MKWeb. Tous droits réservés.