Avez-vous une question? (216) 97 656 803 hajjriadh@gmail.com
JavaScript

Créer un projet front-end avec Vite

Apprenez à créer un projet front-end moderne avec Vite : rôle d'un outil de build, création du projet avec npm create vite, structure des fichiers, serveur de développement avec rechargement à chaud, ...

0 chapitres 0 QCM Accès gratuit
Dans cet article

À propos de ce cours

Apprenez à créer un projet front-end moderne avec Vite : rôle d'un outil de build, création du projet avec npm create vite, structure des fichiers, serveur de développement avec rechargement à chaud, import de CSS, de JSON, d'images et de Bootstrap installé avec npm, variables d'environnement, build de production et publication sur GitHub Pages. Avec des activités pratiques.
  1. Objectifs

    • Comprendre le rôle d'un outil de build et d'un serveur de développement.
    • Créer un projet avec Vite et comprendre sa structure.
    • Importer du CSS, du JSON, des images et une bibliothèque installée avec npm (Bootstrap).
    • Utiliser les variables d'environnement, construire la version de production et la publier.
  2. Pourquoi un outil comme Vite ?

    • Avec Live Server, chaque fichier est envoyé tel quel au navigateur. Dès que le projet grandit, plusieurs besoins apparaissent :
      • importer des paquets npm (import "bootstrap") : le navigateur ne sait pas où trouver node_modules;
      • utiliser TypeScript, JSX (React) ou des fichiers .vue, que le navigateur ne comprend pas ;
      • livrer aux visiteurs des fichiers regroupés, minifiés et mis en cache efficacement.
    • Vite (« rapide » en français, prononcé « vite ») répond à ces besoins. Il a été créé par Evan You (créateur de Vue) et sert aujourd'hui de base à la plupart des projets front-end : vanilla, React, Vue, Svelte…
    • Il a deux rôles :
      • un serveur de développement très rapide avec rechargement à chaud (HMR) : la page se met à jour dès l'enregistrement, souvent sans perdre son état ;
      • un outil de build qui produit le dossier dist/ optimisé à mettre en ligne.

    Vite : structure d'un projet, serveur de développement et build de production

  3. Créer un projet

  4. npm create vite@latest catalogue-cours
  • L'assistant demande le framework (choisissez Vanilla) et la variante (JavaScript ou TypeScript). On peut tout préciser directement : npm create vite@latest catalogue-cours -- --template vanilla. Les autres modèles : vanilla-ts, react, vue, svelte…
  • Puis :
cd catalogue-cours
npm install
npm run dev
  • Le terminal affiche l'adresse du serveur, par défaut http://localhost:5173/. Ctrl + C arrête le serveur.
  • La structure du projet

  • catalogue-cours/
    ├── index.html        ← point d'entrée, à la racine (pas dans public/)
    ├── package.json      ← scripts dev, build, preview
    ├── .gitignore        ← déjà prêt : node_modules, dist…
    ├── public/           ← fichiers copiés tels quels (favicon, robots.txt…)
    └── src/
        ├── main.js       ← script principal, chargé par index.html
        ├── counter.js
        ├── style.css
        └── assets/       ← images importées depuis le JavaScript
    • index.html charge le script avec <script type="module" src="/src/main.js"></script>: tout le projet fonctionne en modules ES.
    • Les scripts de package.json:
    CommandeRôle
    npm run devServeur de développement avec rechargement à chaud
    npm run buildConstruit la version de production dans dist/
    npm run previewSert le dossier dist/ pour le tester comme en production
  • Importer des ressources

    • Avec Vite, on peut importer bien plus que du JavaScript :
    import "./style.css";                     // le CSS est injecté dans la page
    import cours from "./data/cours.json";     // le JSON devient un objet JavaScript
    import logo from "./assets/logo.svg";      // l'adresse finale de l'image
    import { formaterDuree } from "./outils.js";
    
    const image = document.createElement("img");
    image.src = logo;
    image.alt = "Logo";
    document.querySelector("#app").append(image);
    console.log(`${cours.length} cours chargés`);
    • Les fichiers du dossier public/ ne s'importent pas : on y accède par leur chemin depuis la racine (/favicon.svg).
  • Ajouter Bootstrap avec npm

  • npm install bootstrap
    // src/main.js
    import "bootstrap/dist/css/bootstrap.min.css";   // CSS de Bootstrap
    import { Modal, Toast } from "bootstrap";         // seulement les composants utilisés
    import "./style.css";                             // votre CSS, après celui de Bootstrap
    
    const toast = new Toast(document.querySelector("#notification"));
    toast.show();
    • Plus besoin de CDN : Bootstrap est intégré au projet, et le build ne garde que ce qui est utilisé dans le JavaScript.
    1. Les variables d'environnement

      • Un fichier .env à la racine définit des valeurs de configuration. Seules les variables qui commencent par VITE_ sont accessibles dans le code :
      # .env
      VITE_TITRE_APP=Catalogue des cours
      VITE_URL_API=https://api.exemple.tn
      console.log(import.meta.env.VITE_TITRE_APP); // "Catalogue des cours"
      console.log(import.meta.env.MODE);           // "development" ou "production"
      console.log(import.meta.env.DEV);            // true pendant npm run dev
      Attention : les variables VITE_ sont copiées dans le JavaScript envoyé au navigateur, donc visibles par tous. N'y mettez jamais de mot de passe ni de clé secrète.
    2. Construire et publier

      • npm run build produit :
      dist/index.html                  0.45 kB │ gzip: 0.29 kB
      dist/assets/index-CsUDhMuy.css   4.10 kB │ gzip: 1.46 kB
      dist/assets/index-CAoPt-vL.js    4.05 kB │ gzip: 1.77 kB
      ✓ built in 73ms
      • Les noms des fichiers contiennent une empreinte (CAoPt-vL) qui change à chaque modification : le navigateur peut les garder en cache longtemps sans risque d'afficher une ancienne version.
      • Le dossier dist/ se publie sur n'importe quel hébergement statique : GitHub Pages, Netlify, Vercel, ou le dossier public de votre serveur.
      • Pour GitHub Pages, le site est servi dans un sous-dossier (https://compte.github.io/catalogue-cours/). On l'indique dans vite.config.js:
      // vite.config.js
      import { defineConfig } from "vite";
      
      export default defineConfig({
        base: "/catalogue-cours/",
      });
    3. Activités

    4. Activité 1 : premier projet Vite

    • Créez le projet catalogue-cours (modèle vanilla), lancez npm run dev, modifiez le texte de main.js et observez le rechargement à chaud.
    • Cliquez plusieurs fois sur le compteur, puis modifiez style.css: le compteur garde-t-il sa valeur ? Et si vous modifiez main.js?
    • Poussez le projet sur GitHub. Le dossier node_modules est-il envoyé ? Pourquoi ?

    Activité 2 : le catalogue

    • Remplacez le contenu de démonstration : créez src/data/cours.json (6 cours avec titre, niveau et durée) et affichez-les dans des cartes Bootstrap installé avec npm, en utilisant createElement et textContent.
    • Affichez le titre de l'application à partir de la variable VITE_TITRE_APP.

    Activité 3 : le build

    • Lancez npm run build puis npm run preview. Comparez la taille totale de dist/ avec celle du projet. Ouvrez un fichier .js de dist/assets: que constatez-vous ?

    Activité 4 : publication

    • Configurez base dans vite.config.js et publiez le site sur GitHub Pages (la procédure complète avec GitHub Actions est détaillée dans le TP 24).
    Éléments de réponse. Activité 1 : une modification du CSS est appliquée sans recharger la page, le compteur garde sa valeur ; une modification de main.js recharge la page et remet le compteur à 0. node_modules n'est pas envoyé : il est listé dans le .gitignore fourni par Vite. Activité 3 : dist/ ne pèse que quelques dizaines de kilo-octets, contre plusieurs dizaines de mégaoctets pour le projet avec node_modules; le JavaScript est minifié (sans espaces, noms raccourcis, sur une seule ligne).
  • À retenir

    • Vite fournit un serveur de développement avec rechargement à chaud et un build optimisé.
    • npm create vite@latest crée le projet ; npm run dev, build et preview sont les trois commandes à connaître.
    • On importe CSS, JSON, images et paquets npm directement depuis le JavaScript.
    • Le dossier dist/ est ce qu'on publie ; les variables VITE_ sont publiques.

    Sources : nodejs.org, docs.npmjs.com, vite.dev, typescriptlang.org, angular.dev, react.dev, vuejs.org, MDN Web Docs.