Déploiement
Déploiement • Chapitre 4 : Déploiement d'une application frontend

Déploiement d'une application React.js

Comprenez comment transformer vos composants JSX/TSX en fichiers statiques ultra-performants via Vite ou Create React App, maîtrisez l'injection des variables d'environnement client et assurez la pérennité du routage React Router.

⚛️
Compilation Statique

React n'a pas besoin de Node.js en production : le build produit du HTML, CSS et JavaScript purs exécutés par le navigateur.

⚡
Vite Bundler

Minification Rollup ultra-rapide générant le dossier dist/ avec découpage de code (Code Splitting) automatique.

🔐
Préfixe VITE_

Seules les variables préfixées VITE_ sont injectées dans le code client au moment du build.

🛣️
React Router 404

Obligation de configurer une réécriture universelle vers index.html pour que les routes virtuelles fonctionnent au F5.

react-build-deploy.sh
# 1. Vérification du fichier d'environnement de production (.env.production)
# VITE_API_BASE_URL=https://api.mondomaine.com
# VITE_APP_TITLE="Mon Application React"

# 2. Lancer la compilation de production avec Vite
$ npm run build

# Sortie générée dans le dossier dist/ :
# dist/
# ├── assets/
# │   ├── index-b18c9f21.js    # Votre code React + vendor bundle minifié
# │   └── index-9e4a10dc.css   # Styles Tailwind / CSS compilés
# ├── favicon.ico
# └── index.html               # Le point d'entrée unique de la SPA

# 3. Tester localement le résultat exact de production avant envoi
$ npx serve -s dist -l 3000
# L'option -s active le mode Single Page Application (redirection 404 vers index.html)

Guide Pédagogique : De JSX aux Fichiers de Production

1. La Nature d'une Application React : Dev vs Prod

En développement avec npm run dev, Vite utilise les modules ES natifs du navigateur et fournit le rechargement à chaud (Hot Module Replacement - HMR). Le navigateur lit votre code à la volée.

En production, ce serveur de développement ne doit jamais être utilisé ! La commande npm run build déclenche un processus industriel :

  • Transpilation JSX : Vos balises <Component /> sont converties en appels JavaScript standards React.createElement ou fonctions jsx().
  • Tree-Shaking : Si vous importez 2 icônes d'une bibliothèque qui en contient 2000, seules ces 2 icônes sont incluses dans le bundle.
  • Minification : Suppression des espaces, suppression des commentaires, renommage des variables internes en lettres uniques (ex: function handleUserClick devient function h).

2. Le Piège des Variables d'Environnement dans React

Contrairement à un serveur Node.js où process.env est lu en temps réel à chaque requête, dans une application React, les variables sont gravées en dur dans les fichiers JS au moment du build.

⚠️ Règle de Sécurité Absolue

Ne JAMAIS mettre de secrets dans React :

DB_PASSWORD, STRIPE_SECRET_KEY, JWT_SECRET

N'importe quel internaute peut ouvrir les DevTools de son navigateur (touche F12 > Sources) et lire l'intégralité du code JavaScript client. Tout secret placé dans React est public.

✅ Variables Autorisées

Uniquement les configurations publiques :

VITE_API_URL, VITE_STRIPE_PUBLIC_KEY, VITE_ENV

Avec Vite, seules les variables commençant par VITE_ sont lisibles via import.meta.env.VITE_xxx. Avec Create React App, le préfixe obligatoire est REACT_APP_xxx.

3. Pourquoi React Router provoque une erreur 404 en rechargeant ?

Lorsque vous naviguez sur https://mon-site.com/produits/12, c'est React Router qui intercepte l'URL dans le navigateur et affiche le composant <ProductDetail /> sans recharger la page.

Mais si l'internaute appuie sur F5 (Recharger), le navigateur envoie une requête GET directe au serveur web pour le chemin /produits/12. Le serveur cherche alors un fichier physique produits/12/index.html qui n'existe pas, et renvoie une page 404 Not Found !

La Solution Universelle : Configurer l'hébergeur pour qu'il redirige systématiquement toutes les requêtes vers /index.html avec un statut HTTP 200. Une fois index.html et React chargés, React Router lit l'URL actuelle et affiche instantanément le composant attendu.

Comparatif : Développement Local vs Déploiement Production React

AspectMode Développement (npm run dev)Mode Production (npm run build)
Rôle du serveurServeur Node.js actif avec HMR et compilation à la voléeAucun serveur Node.js requis : simples fichiers statiques
Dossier de publicationMémoire vive (RAM) / aucun dossier physiqueDossier dist/ (Vite) ou build/ (CRA)
Poids du code JSPlusieurs mégaoctets non minifiés avec source-mapsQuelques centaines de kilo-octets minifiés et compressés (Gzip/Brotli)
Hébergement adaptéMachine locale du développeur uniquementVercel, Netlify, Cloudflare Pages, S3, Nginx