Initialisation et configuration Next.js 15
Crée un projet Next.js 15 avec TypeScript, Tailwind CSS et App Router.
Accéder gratuitement à cette formation
Renseigne ton email pour débloquer immédiatement cette formation gratuite.
Dans cette première leçon, tu vas installer et configurer un projet Next.js 15 moderne. On y intégrera TypeScript, ESLint, Tailwind CSS et l’App Router, puis on créera une landing page minimale et on gérera une clé d’API via un fichier .env.
Prérequis
- Node.js v18+ installé
- npm ou Yarn
- Compte et clé sur The Movie Database (TMDB) si tu souhaites tester l’API
1. Créer le projet Next.js 15
Lance la commande officielle pour générer un nouveau projet.
On accepte tous les choix par défaut : TypeScript, ESLint, Tailwind CSS, App Router, Turbopack.
1npx create-next-app@latest movies-speaker
Sélectionne :
- TypeScript
- ESLint
- Tailwind CSS
- Pas de répertoire
src - App Router
- Turbopack
- Pas de personnalisation
2. Explorer la structure initiale
Une fois l’installation terminée :
1cd movies-speaker2code .
Tu devrais retrouver :
1app/2├─ globals.css3├─ layout.tsx4└─ page.tsx5next.config.js6package.json7...
app/: nouvelle convention App Routerglobals.css: Tailwind CSS + resetlayout.tsx: balises<html>&<body>globalespage.tsx: page d’accueil par défaut
3. Démarrer le serveur de développement
On vérifie tout de suite que ça tourne :
1npm run dev
Ouvre ensuite http://localhost:3000 : tu dois voir la page Next.js par défaut.
Tip
Si tu as un port occupé, ajoute -p 3001 à la commande.
4. Nettoyer et styliser la page d’accueil
4.1 Supprimer le contenu par défaut
Ouvre app/page.tsx et remplace le <main> complet par un titre minimal.
1export default function Home() {2return (3<main className="flex justify-center items-center min-h-screen">4<h1 className="text-5xl font-bold">Movies</h1>5</main>6)7}
4.2 Ajuster les styles globaux
Tu peux enrichir app/globals.css ou ajouter du CSS supplémentaire. Par exemple :
1body {2@apply bg-gray-50 dark:bg-gray-900 text-gray-800 dark:text-gray-200;3font-family: sans-serif;4}
Relance ton navigateur : ton titre Movies doit s’afficher centré avec ton style.
5. Gérer les variables d’environnement
Pour sécuriser ta clé TMDB, crée un fichier .env.local à la racine.
1touch .env.local
Ajoute-y :
1THE_MOVIE_DB_API_KEY=ton_token_secret_icI
Tip
Les variables .env.local ne sont pas commitées par défaut.
Tu peux aussi ajouter un .env.example sans valeurs.
6. Configurer next.config.js
Pour autoriser les images distantes (si tu veux charger les posters TMDB), édite next.config.js :
1/** @type {import('next').NextConfig} */2const nextConfig = {3images: {4remotePatterns: [5{6protocol: 'https',7hostname: 'image.tmdb.org',8port: '',9pathname: '/t/p/**',10},11],12},13};1415export default nextConfig;
Relance le serveur :
1npm run dev
7. Créer un wrapper fetch côté serveur
Pour centraliser l’appel à TMDB, crée un dossier app/server et un fichier movies.ts :
1'use server'23const API_KEY = process.env.THE_MOVIE_DB_API_KEY;4const BASE_URL = 'https://api.themoviedb.org/3';56export async function fetchMovieDb(path: string) {7const res = await fetch(`${BASE_URL}${path}`, {8headers: {9accept: 'application/json',10Authorization: `Bearer ${API_KEY}`,11},12});13return res.json();14}1516export async function getMovies() {17const data = await fetchMovieDb('/movie/popular');18return data.results; // sous-typé pour l’instant19}
Puis dans app/page.tsx tu peux importer et afficher des titres :
1import { getMovies } from './server/movies';23export default async function Home() {4const movies = await getMovies();56return (7<main>8<h1 className="text-4xl">Movies</h1>9<ul>10{movies.slice(0, 5).map((m: any) => (11<li key={m.id}>{m.title}</li>12))}13</ul>14</main>15)16}
Tip
Cette logique s’exécute côté serveur grâce au await direct dans le composant.
Points clés
npx create-next-app@latestpour démarrer- App Router + TypeScript + Tailwind par défaut
- Structure
app/aveclayout.tsxetpage.tsx - Fichier
.env.localpour stocker les clés secrètes next.config.js: déclarerremotePatternspournext/image- Directive
'use server'pour la logique server-only
Exercices rapides
- Personnalise le message dans
<h1>et ajoute une sous-phrase en<p>. - Charge et affiche l’année de sortie des 5 premiers films.
- Modifie la couleur de fond en mode sombre via Tailwind dans
globals.css.