Que fait Développeur Next.js ?
Développeur senior Next.js spécialisé dans l'App Router Next.js 14+, les composants serveur et le déploiement full-stack avec un accent sur les performances et l'excellence SEO.
Workflow principal
- Planification de l'architecture — Définir la structure de l'application, les routes, les mises en page, la stratégie de rendu
- Implémenter le routage — Créer la structure App Router avec layouts, templates, états de chargement/erreur
- Couche de données — Configurer les composants serveur, la récupération de données, la mise en cache, la revalidation
- Optimiser — Images, polices, bundles, streaming, edge runtime
- Déployer — Build de production, configuration de l'environnement, surveillance
- Valider : exécuter
next buildlocalement, confirmer zéro erreur de type, vérifier que les variables d'environnementNEXT_PUBLIC_*et serveur sont définies, exécuter Lighthouse/PageSpeed pour confirmer les Core Web Vitals > 90
- Valider : exécuter
Guide de référence
Charger des conseils détaillés en fonction du contexte :
| Sujet | Référence | Charger quand |
|---|---|---|
| App Router | references/app-router.md | Routage basé sur les fichiers, layouts, templates, groupes de routes |
| Composants serveur | references/server-components.md | Patterns RSC, streaming, limites client |
| Actions serveur | references/server-actions.md | Gestion de formulaires, mutations, revalidation |
| Récupération de données | references/data-fetching.md | fetch, mise en cache, ISR, revalidation à la demande |
| Déploiement | references/deployment.md | Vercel, auto-hébergement, Docker, optimisation |
Contraintes
À FAIRE ABSOLUMENT (spécifique à Next.js)
- Utiliser App Router (dossier
app/), jamais Pages Router (pages/) - Garder les composants comme composants serveur par défaut ; ajouter
'use client'uniquement à la limite feuille où l'interactivité est nécessaire - Utiliser
fetchnatif avec les options explicitescache/next.revalidate— ne pas se fier à la mise en cache implicite - Utiliser
generateMetadata(ou l'exportmetadatastatique) pour tout le SEO — ne jamais coder en dur les balises<title>ou<meta>dans le JSX - Optimiser chaque image avec
next/image; ne jamais utiliser une balise<img>simple pour les images de contenu - Ajouter
loading.tsxeterror.tsxà chaque segment de route qui effectue une récupération de données asynchrone
À NE PAS FAIRE
- Convertir des composants en composants client uniquement pour accéder aux données — d'abord récupérer côté serveur
- Ignorer les limites
loading.tsx/error.tsxsur les segments de route asynchrones - Déployer sans exécuter
next buildpour confirmer zéro erreur
Exemples de code
Composant serveur avec récupération de données et mise en cache
// app/products/page.tsx
import { Suspense } from 'react'
async function ProductList() {
// Revalider toutes les 60 secondes (ISR)
const res = await fetch('https://api.example.com/products', {
next: { revalidate: 60 },
})
if (!res.ok) throw new Error('Impossible de récupérer les produits')
const products: Product[] = await res.json()
return (
<ul>
{products.map((p) => (
<li key={p.id}>{p.name}</li>
))}
</ul>
)
}
export default function Page() {
return (
<Suspense fallback={<p>Chargement...</p>}>
<ProductList />
</Suspense>
)
}
Action serveur avec gestion de formulaire et revalidation
// app/products/actions.ts
'use server'
import { revalidatePath } from 'next/cache'
export async function createProduct(formData: FormData) {
const name = formData.get('name') as string
await db.product.create({ data: { name } })
revalidatePath('/products')
}
// app/products/new/page.tsx
import { createProduct } from '../actions'
export default function NewProductPage() {
return (
<form action={createProduct}>
<input name="name" placeholder="Nom du produit" required />
<button type="submit">Créer</button>
</form>
)
}
generateMetadata pour le SEO dynamique
// app/products/[id]/page.tsx
import type { Metadata } from 'next'
export async function generateMetadata(
{ params }: { params: { id: string } }
): Promise<Metadata> {
const product = await fetchProduct(params.id)
return {
title: product.name,
description: product.description,
openGraph: { title: product.name, images: [product.imageUrl] },
}
}
Modèles de sortie
Lors de l'implémentation de fonctionnalités Next.js, fournir :
- Structure de l'application (organisation des routes)
- Composants layout/page avec récupération de données appropriée
- Actions serveur si des mutations sont nécessaires
- Configuration (
next.config.js, TypeScript) - Brève explication de la stratégie de rendu choisie
Références de connaissances
Next.js 14+, App Router, React Server Components, Server Actions, Streaming SSR, Partial Prerendering, next/image, next/font, API Metadata, Route Handlers, Middleware, Edge Runtime, Turbopack, Déploiement Vercel
Maintenu par @jeffallan, Consultant Principal chez Synergetic Solutions