Estructura del Proyecto
Después de crear tu proyecto con create-next-app
, encontrarás una estructura de carpetas específica que NextJS utiliza para organizar tu aplicación. Entender esta estructura es fundamental para trabajar eficientemente.
Estructura básica
Cuando creas un proyecto nuevo, obtienes esta estructura:
mi-proyecto/
├── app/ # App Router - tus rutas y páginas
│ ├── layout.tsx # Layout raíz de la aplicación
│ ├── page.tsx # Página principal (/)
│ └── globals.css # Estilos globales
├── public/ # Archivos estáticos
│ ├── next.svg
│ └── vercel.svg
├── node_modules/ # Dependencias (no tocar)
├── .next/ # Build output (generado automáticamente)
├── next.config.ts # Configuración de NextJS
├── package.json # Dependencias del proyecto
├── tsconfig.json # Configuración de TypeScript
└── tailwind.config.ts # Configuración de Tailwind (si lo instalaste)
La carpeta app/
La carpeta app/
es el corazón de tu aplicación NextJS 15. Usa el App Router, el nuevo sistema de routing introducido en NextJS 13 y mejorado en NextJS 15.
Archivos especiales
NextJS reconoce ciertos nombres de archivo como especiales:
Archivo | Propósito | Requerido |
---|---|---|
layout.tsx | Layout compartido entre rutas | ✅ Sí (root) |
page.tsx | Página/ruta única | ✅ Para crear ruta |
loading.tsx | UI de carga con Suspense | ❌ No |
error.tsx | UI de error | ❌ No |
not-found.tsx | UI cuando no se encuentra | ❌ No |
route.ts | API endpoint | ❌ No |
Convención de nombres
Todos estos archivos especiales deben usar exactamente estos nombres. NextJS los busca automáticamente en cada carpeta.
Ejemplo de estructura con rutas
app/
├── layout.tsx # Layout raíz
├── page.tsx # Ruta: /
├── about/
│ └── page.tsx # Ruta: /about
├── blog/
│ ├── page.tsx # Ruta: /blog
│ ├── [slug]/
│ │ └── page.tsx # Ruta: /blog/mi-post
│ └── layout.tsx # Layout para /blog/*
└── dashboard/
├── layout.tsx # Layout para /dashboard/*
├── page.tsx # Ruta: /dashboard
├── settings/
│ └── page.tsx # Ruta: /dashboard/settings
└── analytics/
└── page.tsx # Ruta: /dashboard/analytics
Cada carpeta en app/
representa un segmento de ruta. Para que sea accesible como página, debe contener un archivo page.tsx
.
La carpeta public/
Todo lo que pongas en public/
es accesible directamente desde la URL raíz.
public/
├── logo.png # Accesible en /logo.png
├── favicon.ico # Favicon del sitio
├── images/
│ └── hero.jpg # Accesible en /images/hero.jpg
└── fonts/
└── custom.woff2 # Accesible en /fonts/custom.woff2
Uso en código
// En cualquier componente
<img src="/logo.png" alt="Logo" />
<img src="/images/hero.jpg" alt="Hero" />
Importante
- NO uses
/public/
en las rutas, solo/
- Los archivos en
public/
NO se optimizan automáticamente - Para imágenes, usa mejor el componente
next/image
Archivos de configuración
next.config.ts
Archivo de configuración principal de NextJS:
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
// Configuraciones aquí
images: {
domains: ['ejemplo.com'], // Dominios permitidos para imágenes
},
// más opciones...
};
export default nextConfig;
package.json
Define tus dependencias y scripts:
{
"scripts": {
"dev": "next dev", // Desarrollo
"build": "next build", // Build para producción
"start": "next start", // Servidor de producción
"lint": "eslint" // Linter
}
}
tsconfig.json
Configuración de TypeScript. NextJS lo configura automáticamente, pero puedes ajustarlo:
{
"compilerOptions": {
"paths": {
"@/*": ["./*"] // Permite imports con @/
}
}
}
Carpetas opcionales
Puedes crear estas carpetas en la raíz para organizar tu código:
mi-proyecto/
├── app/ # Rutas (requerido)
├── components/ # Componentes reutilizables
├── lib/ # Utilidades y helpers
├── hooks/ # Custom hooks
├── types/ # Types de TypeScript
├── styles/ # Estilos adicionales
└── public/ # Estáticos (requerido)
Organización recomendada
NextJS no te obliga a usar una estructura específica fuera de app/
y public/
. Organiza tu código como prefieras, pero mantén consistencia.
Archivos que puedes ignorar
Estos archivos son generados automáticamente:
.next/
- Build output (Git ignore)node_modules/
- Dependencias (Git ignore).next.lock
- Lock file de Nextout/
- Export estático (si usasnext export
)
Nunca modifiques archivos en .next/
o node_modules/
. Se regeneran automáticamente.
Imports con alias
NextJS configura automáticamente el alias @/
que apunta a la raíz del proyecto:
// En lugar de esto:
import Button from '../../../components/Button'
// Usa esto:
import Button from '@/components/Button'
Funciona desde cualquier nivel de profundidad en tu proyecto.
Próximos pasos
Ahora que entiendes la estructura, aprende cómo:
- Crear rutas - Sistema de routing de NextJS
- Usar layouts - Compartir UI entre páginas
- Server Components - El modelo de componentes de NextJS
Resumen
app/
contiene tus rutas con el App Routerpublic/
para archivos estáticos accesibles públicamente- Archivos especiales como
page.tsx
,layout.tsx
definen tu aplicación - Usa
@/
para imports limpios desde cualquier parte