Séance 6-b : Introduction à Nuxt 3
🎯 Objectifs
Découvrir Nuxt et ses apports (SSR, SSG, SEO).
Migrer une app Vue vers Nuxt.
Qu'est-ce que Nuxt.Js ?
Nuxt (https://nuxt.com/), vesion 4 aujourd'hui, est un framework construit au‑dessus de Vue 3 qui facilite la création d'applications universelles (fullstack) : sites statiques, applications server‑rendered (SSR) ou applications hybridées. Nuxt vise à fournir une structure et des conventions pour accélérer le développement (routing automatique, layouts, plugins, modules, import automatisés, ...). Sa runtime moderne repose sur Nitro (moteur serveur agnostique) et offre un excellent support pour le rendu côté serveur, le prerendering, le déploiement serverless et l'optimisation des performances.
Points clés de Nuxt 3 / 4 :
Routing automatique via
pages/
.Layouts et slots globaux via
layouts/
.API server intégrée via
server/
(endpoints API côté serveur).Nitro : abstraction du serveur.
Modules & plugins pour étendre les fonctionnalités (auth, i18n, analytics).
Support SSR, SSG et ISR (hybride) natif.
Intégration simple avec Vite, TypeScript et Pinia.
Comparatif Nuxt vs Vue (grand lignes)
Vue :
Framework UI (lib) pour construire des interfaces réactives côté client.
Idéal pour des applications SPA où l'on contrôle la configuration et l'outillage.
Nécessite d'ajouter manuellement routing, SSR/SSG, structure de dossiers si besoin.
Nuxt :
Framework construit sur Vue, fournit conventions et scaffolding.
Ajoute des fonctionnalités prêtes à l'emploi : SSR/SSG, routage automatique, API server.
Réduit la configuration initiale, facilite le SEO et le déploiement sur des plateformes serverless.
Quand choisir Nuxt ?
Projet nécessitant SEO, SSR ou génération statique.
Besoin d'une structure rapide, modules prêts à l'emploi et déploiement serverless.
Quand choisir Vue seul ?
Projet front uniquement où SSR/SSG n'est pas nécessaire.
Besoin d'une configuration fine et légère, ou intégration dans une architecture existante.
Modes de rendu — tableau synthétique
CSR (Client‑Side Rendering)
Le rendu HTML est généré côté client par le navigateur après téléchargement des JS
Interactions rapides après initial load ; développement simple
Mauvais SEO, temps au premier rendu plus long
SPA internes, dashboards authentifiés
SSR (Server‑Side Rendering)
Le serveur renvoie du HTML pré‑rendu pour chaque requête
Meilleur SEO, premier rendu rapide, partage social (meta)
Charge serveur plus importante, complexité (hydration)
Sites publics, e‑commerce, blogs dynamiques
SSG (Static Site Generation)
Pages générées à la build en HTML statique (prérendu)
Très performant, sécurisé, scale gratuit (CDN)
Moins adapté au contenu très dynamique sans revalidation
Documentation, blogs, landing pages
ISR (Incremental Static Regeneration) / Revalidation
SSG + possibilité de régénérer des pages après build (à la demande ou périodiquement)
Meilleure cohérence entre perf et dynamique
Complexité additionnelle, dépend du provider
Sites commerce avec catalogue mis à jour souvent
Edge Rendering / SSR@Edge
Rendu SSR exécuté côté edge (CDN) proche de l'utilisateur
Très faible latence, meilleure SEO globalement
Support dépendant du provider et du runtime
Sites internationaux, latence critique
Structure Nuxt
Pour que Nuxt fonctionne de manière optimale, il faut respecter une certaine structure de dossiers. Voici les principaux répertoires et fichiers :
pages/
: routage automatique (chaque fichier = route)layouts/
: templates globaux (ex : default, auth)components/
: composants réutilisablescomposables/
: composables auto‑importésplugins/
: registres et initialisations (ex : axios, i18n)server/
: endpoints server (API) et middlewareapp.vue
/nuxt.config.ts
: configuration globale
La documentation ici est très explicite : https://nuxt.com/docs/4.x/guide/directory-structure/app/app
/!\ Depuis la version 4, la structure est déportée dans un dossier app/
pour plus de flexibilité.
Modules Nuxt
Nuxt dispose d'un écosystème riche de modules (https://nuxt.com/modules) pour ajouter des fonctionnalités courantes facilement, par exemple :
Authentification (ex :
@nuxtjs/auth-next
)Internationalisation (i18n) (ex : `@nuxtjs/i18n
Analytics (ex :
@nuxtjs/google-analytics
)CMS (ex :
@nuxtjs/content
)...
Routage avec Nuxt
Le routage dans Nuxt (https://nuxt.com/docs/4.x/getting-started/routing) est automatique via le dossier pages/
. Chaque fichier .vue
dans ce dossier devient une route accessible. Il est possible de créer des routes dynamiques, imbriquées, et de configurer des meta‑tags via la propriété definePageMeta
.
Voici quelques exemples :
pages/index.vue
→/
pages/about.vue
→/about
pages/blog/index.vue
→/blog
pages/blog/[id].vue
→/blog/:id
(route dynamique)pages/dashboard/settings.vue
→/dashboard/settings
(route imbriquée)pages/user/[...slug].vue
→/user/*
(catch-all)
definePageMeta
pour configurer les meta‑tags SEO (https://nuxt.com/docs/4.x/api/utils/define-page-meta)
<script setup>
definePageMeta({
title: 'Page Title',
meta: [
{ name: 'description', content: 'Page description for SEO' }
]
})
</script>
Exercice
Migrer une application Vue 3 existante vers Nuxt 4 :
Créer un nouveau projet Nuxt 4 (
npm create nuxt@latest
).Déplacer et adapter vos fichiers
Les composables, services et stores Pinia doivent être placés dans
composables/
,services/
etstores/
respectivement.Les views (pages) doivent être placées dans
pages/
avec le routage automatique. Vous pourrez retirer les imports et configurations de Vue Router.
La sécurité, avec Nuxt, (authentification, autorisation) sera vue dans la séance suivante.
Last updated