Déployer sur GitHub Pages
GitHub Pages est un service d'hébergement gratuit intégré à GitHub. Il permet de mettre en ligne des applications statiques directement depuis un repository, sans configuration de serveur.
Quand choisir GitHub Pages ?
- Votre code est déjà sur GitHub — pas besoin d'un compte sur une plateforme supplémentaire
- Projet personnel, portfolio, application sans backend
- Vous voulez rester dans l'écosystème GitHub
Pour les projets du cours, Vercel reste l'option recommandée (zéro configuration, déploiement automatique). GitHub Pages est une bonne alternative si vous préférez tout garder sur GitHub.
Étape 1 — Configurer le base path
GitHub Pages héberge votre app sous https://username.github.io/nom-du-repo/ — pas à la racine /. Vite doit en être informé.
Modifiez vite.config.ts :
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
base: '/nom-de-votre-repo/', // ⚠️ Remplacez par le nom exact de votre repo
})
Nom exact obligatoire
base doit correspondre exactement au nom du repository GitHub.
- Repo
https://github.com/alice/kana-app→base: '/kana-app/' - Repo
https://github.com/alice/portfolio→base: '/portfolio/'
Étape 2 — Installer gh-pages et configurer les scripts
Installez le package gh-pages :
npm install --save-dev gh-pages
Ajoutez ces deux scripts dans package.json :
{
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"predeploy": "npm run build",
"deploy": "gh-pages -d dist"
}
}
Comment ça fonctionne :
predeploys'exécute automatiquement avantdeploy— il build le projetdeploypousse le contenu dedist/sur une branchegh-pages
Étape 3 — Déployer
npm run deploy
Cette commande :
- Build l'application (
npm run build) - Crée ou met à jour la branche
gh-pages - Pousse le contenu de
dist/sur cette branche
Succès
Votre site sera accessible à https://username.github.io/nom-du-repo/
Étape 4 — Activer GitHub Pages
La première fois seulement, activez GitHub Pages dans les paramètres du repo :
- Allez sur votre repository GitHub
- Cliquez sur Settings
- Dans le menu latéral, cliquez sur Pages
- Sous Source, choisissez :
- Branch :
gh-pages - Folder :
/ (root)
- Branch :
- Cliquez sur Save
Votre app sera disponible en 1-2 minutes à l'URL indiquée.
Pourquoi faut-il configurer 'base' dans vite.config.ts pour GitHub Pages ?
Gérer les routes React Router
Si vous utilisez React Router, les URLs directes (ex: /quiz) retournent une 404 — GitHub Pages cherche un fichier /quiz/index.html qui n'existe pas.
Solution : HashRouter
Remplacez BrowserRouter par HashRouter :
// Avant
import { BrowserRouter } from 'react-router-dom';
// Après
import { HashRouter } from 'react-router-dom';
function App() {
return (
<HashRouter>
{/* Vos routes */}
</HashRouter>
);
}
Les URLs deviennent :
https://username.github.io/kana-app/#/https://username.github.io/kana-app/#/quizhttps://username.github.io/kana-app/#/study
Astuce
Le # dans l'URL est moins propre que BrowserRouter, mais c'est la solution la plus simple et la plus fiable pour GitHub Pages. Pas de configuration supplémentaire.
Pourquoi utiliser HashRouter plutôt que BrowserRouter sur GitHub Pages ?
Mises à jour
Pour redéployer après des modifications :
# Faites vos modifications, puis :
git add .
git commit -m "Update app"
git push origin main
# Redéployez
npm run deploy
Attention
Contrairement à Vercel, GitHub Pages ne se déploie pas automatiquement à chaque push. Vous devez relancer npm run deploy manuellement.
Dépannage
Page blanche après déploiement
→ Vérifiez que base dans vite.config.ts correspond exactement au nom du repo.
Erreur 404 sur les routes
→ Passez de BrowserRouter à HashRouter (voir section ci-dessus).
npm run deploy échoue
→ Vérifiez que gh-pages est installé (npm install --save-dev gh-pages) et que le build fonctionne (npm run build).
Les modifications ne s'affichent pas → GitHub Pages peut mettre 1-2 minutes à se mettre à jour. Forcez le rechargement avec Ctrl+Shift+R.
Récapitulatif
Checklist de déploiement
- [ ]
baseconfiguré dansvite.config.ts(nom exact du repo) - [ ]
gh-pagesinstallé (npm install --save-dev gh-pages) - [ ] Scripts
predeployetdeploydanspackage.json - [ ]
npm run buildfonctionne sans erreur - [ ]
HashRoutersi vous utilisez React Router - [ ] GitHub Pages activé dans Settings → Pages (branche
gh-pages) - [ ]
npm run deploylancé