Skip to content

Déployer sur Vercel

Vercel héberge gratuitement les projets Vue.js / Vite avec déploiement continu depuis GitHub : à chaque git push, le site est rebuild et redéployé en quelques secondes.

Comparaison rapide

HébergeurAvantagesPour quoi
VercelDéploiement auto, variables d'env UI, build rapide, gratuitProjets perso, prototypes, prod
GitHub PagesGratuit, intégré GitHubSites statiques simples
InfomaniakHébergement suisse, FTP classiqueApps avec backend PHP

1. Créer un compte et importer le dépôt

1.1 Se connecter

Aller sur vercel.com et choisir Continue with GitHub (le plus rapide pour récupérer la liste de vos dépôts).

Page de login Vercel

1.2 Importer un projet

Depuis le dashboard Vercel : Add New... → Project. Vercel liste tous les dépôts GitHub auxquels il a accès. Utilisez la barre de recherche pour filtrer (ex : pokedex, 2026).

Cliquer sur Import à côté du dépôt à déployer.

Page New Project — recherche dans les dépôts GitHub

2. Configurer le projet et déployer

2.1 Framework Preset détecté automatiquement

Vercel détecte que le projet est sous Vite (lecture du package.json). Laisser les valeurs par défaut :

ChampValeur
Framework PresetVite
Build Commandnpm run build
Output Directorydist
Install Commandnpm install

2.2 Définir une première variable d'environnement

Dans la section Environment Variables, ajouter VITE_API_URL avec l'URL de votre API en production.

Configuration framework Vite + variable VITE_API_URL initiale

Cliquer sur Deploy. Vercel lance le build (~30-60s) :

Build en cours sur Vercel

Une fois prêt, vous obtenez l'URL de production (format <project>.vercel.app) :

Déploiement Production Ready

3. ⚠️ Premier piège : les images ne s'affichent pas

Si vous ouvrez l'app, vous risquez de voir un écran (presque) vide : le titre s'affiche, mais aucune image, et la page détail d'une ressource est totalement cassée.

App déployée — images manquantes, contenu cassé

Pourquoi ?

Le vite.config.mjs du Pokédex contient :

js
base: process.env.VITE_BASE_URL || './',

Sans la variable VITE_BASE_URL définie, import.meta.env.BASE_URL vaut ./ (chemin relatif).

Route consultéeURL d'image généréeRésolution navigateurStatut
/ (liste)./images/pikachu.png/images/pikachu.png
/pokemon/1 (détail)./images/pikachu.png/pokemon/images/pikachu.png404

C'est le piège classique du chemin relatif + route imbriquée. Avec VITE_BASE_URL=/, BASE_URL devient / (absolu) et les images résolvent correctement quelle que soit la route.

3.1 Ajouter VITE_BASE_URL

Dans Settings → Environment Variables → Add Environment Variable :

  • Key : VITE_BASE_URL
  • Value : /
  • Environments : Production + Preview (au minimum)

Modal d'ajout VITE_BASE_URL = /

Après validation, les deux variables sont visibles. Notez le toast Vercel : « A new deployment is needed for changes to take effect » — Vite injecte les variables au build, donc un redéploiement est obligatoire.

Liste des variables d'environnement avec VITE_BASE_URL et VITE_API_URL

3.2 Redéployer manuellement

Aller dans Deployments :

Liste des déploiements

Cliquer sur le menu en haut à droite → Create Deployment :

Menu Create Deployment

Vercel propose de redéployer la branche actuelle. Confirmer et attendre ~30 secondes.

Astuce — déclencher un rebuild via Git

Alternative équivalente sans passer par l'UI :

bash
git commit --allow-empty -m "chore: trigger rebuild"
git push

4. ⚠️ Second piège : 404 sur refresh d'une route imbriquée

Une fois VITE_BASE_URL corrigé, la liste fonctionne :

Liste Pokédex — images affichées

…mais dès que vous rafraîchissez (F5) sur une route imbriquée comme /pokemon/36289749-…, Vercel renvoie un 404.

Pourquoi ?

Vue Router en mode history gère les routes côté client uniquement. Sur F5, le navigateur envoie la requête GET /pokemon/<uuid> au serveur. Vercel cherche un fichier physique correspondant, ne le trouve pas → 404.

La solution : indiquer à Vercel de servir index.html pour toutes les requêtes inconnues (Vue Router prend ensuite le relais côté client).

4.1 Ajouter vercel.json à la racine du repo

Créer le fichier vercel.json à la racine du projet (à côté de package.json) :

json
{
  "rewrites": [
    { "source": "/(.*)", "destination": "/index.html" }
  ]
}

Effet : toute requête est rewrited vers index.html. Les assets statiques (/images/*, /assets/*, etc.) restent prioritaires car résolus avant les rewrites par Vercel.

bash
git add vercel.json
git commit -m "feat: ajouter rewrite SPA pour Vercel"
git push

Vercel redéploie automatiquement (~30s). Tester en ouvrant directement une URL imbriquée :

Page détail Pokémon — accessible via URL directe

5. Pièges connus — récapitulatif

SymptômeCauseSolution
Image manquante en page détail mais OK en listeBASE_URL = ./ (chemin relatif)VITE_BASE_URL=/ + redeploy
F5 sur /pokemon/X → 404SPA sans rewrite serveurvercel.json avec rewrite vers index.html
Modif de variable d'env sans effetVariables Vite injectées au buildRedeploy manuel ou git commit --allow-empty && git push
Erreur CORS en prod (mais OK en dev)API ne whitelist pas le domaine VercelAjouter le domaine *.vercel.app côté API
URL change à chaque brancheVercel génère une URL par branche/previewConfigurer un domaine custom dans Settings → Domains

6. Aller plus loin

Variables d'environnement par environnement

Vercel propose trois environnements : Production, Preview (autres branches), Development (vercel dev en local). Exemple typique :

VariableProductionPreviewDevelopment
VITE_API_URLhttps://api.prod.comhttps://api.staging.comhttp://localhost:3535
VITE_BASE_URL//(non défini)

Limiter les déploiements à main

Par défaut, Vercel déploie toutes les branches poussées sur GitHub. Pour économiser des minutes de build : Settings → Git → Production Branch : main

Logs et debugging

  • Deployments → cliquer sur un déploiement → Build Logs : pour les erreurs de build
  • Runtime Logs : non applicable pour Vite (build statique)

Ressources

Documentation pour les cours de développement web