¿Qué es Nuxt.js y Cuándo Usarlo? Guía Completa con Ejemplos

- Andrés Cruz

¿Qué es Nuxt.js y Cuándo Usarlo? Guía Completa con Ejemplos

Vue.js se ha consolidado como un framework de JavaScript excepcional para construir interfaces de usuario y aplicaciones de una sola página (SPA). Sin embargo, a medida que los proyectos crecen en complejidad, surgen nuevos desafíos. Aquí es donde entra Nuxt.js.

Nuxt.js es un framework de alto nivel construido sobre Vue.js. Su propósito es simplificar y potenciar el desarrollo de aplicaciones web modernas, ofreciendo una estructura sólida y soluciones a problemas comunes del desarrollo frontend.

Si ya conoces Vue, te sentirás como en casa con Nuxt. Extiende la potencia de Vue con características que mejoran la experiencia del desarrollador y el rendimiento del producto final.

Nuxt.js vs. Vue.js: La gran diferencia

La diferencia fundamental radica en cómo se renderiza la aplicación. Un proyecto estándar de Vue.js es una Aplicación de una Sola Página (SPA). En una SPA, el navegador recibe un HTML casi vacío y un archivo JavaScript. Es el JavaScript el que se encarga de "pintar" la interfaz en el lado del cliente.

Este enfoque es rápido para la navegación interna, pero tiene dos desventajas principales:

  1. Carga inicial lenta: El usuario ve una página en blanco hasta que el JavaScript se descarga y ejecuta por completo.
  2. Problemas de SEO: Los rastreadores de los motores de búsqueda (como Google) pueden tener dificultades para indexar contenido que no está presente en el HTML inicial, afectando la visibilidad del sitio.

Nuxt soluciona esto ofreciendo diferentes modos de renderizado desde el principio.

Modos de Renderizado en Nuxt

Nuxt no se limita a las SPAs. Ofrece dos alternativas potentes:

  • Renderizado en el Lado del Servidor (SSR): Cada vez que un usuario solicita una página, el servidor genera el HTML completo y lo envía al navegador. El navegador muestra contenido significativo de inmediato, mejorando tanto el SEO como la percepción de velocidad.
  • Generación de Sitios Estáticos (SSG): Nuxt genera el HTML completo de todas las páginas durante el proceso de compilación (build). El resultado es un conjunto de archivos HTML, CSS y JS estáticos que se pueden alojar en cualquier CDN. Esto ofrece la máxima velocidad y seguridad.

Con Nuxt, puedes elegir el modo que mejor se adapte a tu proyecto, e incluso combinar modos con una estrategia de renderizado híbrido.

Características clave en la práctica

Más allá del renderizado, Nuxt ofrece un conjunto de convenciones y herramientas que aceleran el desarrollo.

1. Enrutamiento automático basado en archivos

Olvídate de configurar manualmente los archivos de rutas. Nuxt genera automáticamente las rutas de tu aplicación basándose en la estructura de tu directorio pages/.

Ejemplo de estructura:

pages/
├── index.vue
├── about.vue
└── posts/
    ├── index.vue
    └── [id].vue

Rutas generadas automáticamente:

  • / (para pages/index.vue)
  • /about (para pages/about.vue)
  • /posts (para pages/posts/index.vue)
  • /posts/:id (para la ruta dinámica pages/posts/[id].vue)

Para navegar entre páginas, simplemente usas el componente <NuxtLink>.

2. Obtención de datos (Data Fetching)

Nuxt 3 introdujo composables para obtener datos de forma sencilla, tanto en el servidor como en el cliente. El más común es useFetch.

Ejemplo: Obtener un post de una API en un componente de página.

<!-- pages/posts/[id].vue -->
<script setup>
const route = useRoute();
const { data: post, pending, error } = await useFetch(`https://api.example.com/posts/${route.params.id}`);
</script>

<template>
  <div v-if="pending">Cargando...</div>
  <div v-else-if="error">Error al cargar el post.</div>
  <article v-else>
    <h1>{{ post.title }}</h1>
    <p>{{ post.body }}</p>
  </article>
</template>

useFetch se encarga de obtener los datos en el servidor (para SSR) o en el cliente, gestionando estados de carga y error por ti.

3. Auto-importación de componentes y composables

Los componentes, composables y utilidades que coloques en los directorios correctos (components/, composables/) están disponibles automáticamente en toda tu aplicación sin necesidad de importarlos manualmente. Esto limpia tu código y mejora la experiencia de desarrollo.

4. Estructura de directorios organizada

Nuxt proporciona una estructura de carpetas clara y estandarizada que organiza tu proyecto de manera lógica, facilitando el mantenimiento y la escalabilidad.

  • pages/: Para las rutas y vistas de la aplicación.
  • components/: Para los componentes de Vue.
  • layouts/: Para las plantillas de diseño (ej. default, auth).
  • server/: Para crear endpoints de API y lógica de backend.
  • assets/: Para recursos como CSS, SASS o imágenes que serán procesados por el build.
  • public/: Para archivos estáticos que se sirven tal cual (ej. robots.txt).

El gran salto: La llegada de Nuxt 3

El artículo original mencionaba incorrectamente "Nuxt 4". En realidad, la gran reescritura y modernización del framework fue Nuxt 3.

Nuxt 3 fue reconstruido desde cero para ser más ligero, rápido y potente, aprovechando las últimas tecnologías del ecosistema de Vue:

  • Vue 3 y Composition API: Adopta la última versión de Vue, permitiendo una lógica más reutilizable y organizada.
  • Vite: Utiliza Vite como motor de desarrollo, ofreciendo un arranque casi instantáneo y recarga en caliente (HMR) ultrarrápida.
  • TypeScript: El soporte para TypeScript está integrado de serie, proporcionando tipado estático para proyectos más robustos.
  • Nitro Server Engine: Un nuevo y potente motor de servidor que compila tu lógica de backend (dentro del directorio server/) para ser universal. Puede desplegarse en Node.js, entornos sin servidor (Serverless), Edge (Cloudflare Workers), etc. Esto te permite crear rutas de API directamente en tu proyecto Nuxt.

Para iniciar un nuevo proyecto de Nuxt 3, el comando correcto es:

npx nuxi init <nombre-del-proyecto>

Conclusión: ¿Cuándo deberías elegir Nuxt.js?

Aunque puedes construir cualquier cosa con Vue, deberías elegir Nuxt.js cuando:

  • El SEO es una prioridad: Para blogs, sitios de marketing, e-commerce o cualquier sitio público que necesite ser encontrado en Google.
  • El rendimiento en la carga inicial es crítico: Nuxt (con SSR o SSG) envía contenido visible al instante, mejorando la experiencia del usuario.
  • Necesitas una estructura y convenciones claras: Para proyectos grandes o equipos, la estructura de Nuxt mantiene a todos en la misma página.
  • Quieres construir un backend simple junto a tu frontend: El motor Nitro de Nuxt 3 te permite crear una API RESTful sin necesidad de un framework de backend separado.
  • Buscas una experiencia de desarrollo superior: Con características como el enrutamiento automático, la auto-importación y Vite, Nuxt te permite ser más productivo.

En resumen, Nuxt.js no reemplaza a Vue.js, sino que lo complementa, creando un framework full-stack capaz de abordar los desafíos del desarrollo web moderno de una manera elegante y eficiente.

¿Dudas entre Vue.js y Nuxt.js? Descubre cómo Nuxt mejora el SEO y rendimiento con SSR y SSG. Esta guía completa explica sus ventajas, con ejemplos de Nuxt 3, para que sepas exactamente cuándo elegirlo.

Acepto recibir anuncios de interes sobre este Blog.

Andrés Cruz