Arquitectura de carpetas para un proyecto escalable en Next.js 13

April 11, 2023 / 5 minutos

Nota: Este post es una propuesta de arquitectura de carpetas para un proyecto en Next.js 13, si tienes alguna sugerencia o comentario puedes dejarlo en los comentarios.

Introducción

En este post voy a compartir mi propuesta de arquitectura de carpetas para un proyecto en Next.js 13 , esta propuesta se basa en la experiencia que he tenido trabajando en proyectos de diferentes tamaños y en diferentes tecnologías, y en mi opinión es una propuesta que se puede adaptar a cualquier proyecto.

Propuesta 1: Arquitectura de carpetas

Carpeta src

La carpeta src es la carpeta principal de nuestro proyecto, en esta carpeta se encuentran todos los archivos que componen nuestro proyecto, esta carpeta es la que se compila y se ejecuta en el servidor de desarrollo de Next.js y es sumamente importante que esta carpeta sea el punto de entrada de nuestro proyecto y no usar el directorio raíz.

Carpeta public

No hace falta explicar mucho sobre esta carpeta, esta carpeta es la que contiene los archivos estáticos que se van a servir en el servidor de producción, por ejemplo, imágenes, fuentes, archivos de audio, etc.

Carpeta src/app

Esta carpeta es el equivalente a la carpeta pages de Next.js, en esta carpeta se encuentran todos los archivos que componen las páginas de nuestra aplicación, por ejemplo, /page.tsx, /about/page.tsx.

Carpeta src/core

Esta carpeta contiene los archivos que componen el núcleo de la aplicación, en esta carpeta se encuentran los archivos que se compilan y se ejecutan en el servidor de desarrollo de Next.js, por ejemplo, componentes, libs, hooks, etc.

core

Ejemplo de una aplicación

     ├── 📁 src
   ├── 📁 app
   ├── 📁 about
   ├── 📄 page.tsx
   ├── 📄 styles.module.css
   └── 📁 components
   ├── 📁 home
   ├── 📄 page.tsx
   ├── 📄 styles.module.css
   └── 📁 components
|   ├── 📁 core
   ├── 📁 components
   ├── 📄 Navbar.tsx
   ├── 📄 Footer.tsx
   └── 📄 Sidebar.tsx
   ├── 📁 hooks
   ├── 📄 useAuth.ts
   ├── 📄 useUser.ts
   └── 📄 usePosts.ts
   ├── 📁 libs
   ├── 📄 api.ts
   ├── 📄 auth.ts
   └── 📄 posts.ts
   ├── 📁 styles
   ├── 📄 global.css
   ├── 📄 theme.ts
   └── 📄 mixins.ts
   ├── 📁 utils
   ├── 📄 formatNumber.ts
   ├── 📄 formatCurrency.ts
   └── 📄 formatTime.ts
   ├── 📁 types
   ├── 📄 User.ts
   ├── 📄 Post.ts
   └── 📄 Comment.ts
   ├── 📁 constants
   ├── 📄 API.ts
   ├── 📄 APP.ts
   └── 📄 ENV.ts
   ├── 📁 public
   ├── 📄 favicon.ico
   ├── 📄 logo.svg
   └── 📄 robots.txt
├── 📄 .gitignore
├── 📄 next-env.d.ts
├── 📄 next.config.js
├── 📄 package.json
├── 📄 README.md
├── 📄 tsconfig.json
└── 📄 pnpm-lock.yaml