Fondations techniques
Vue dâensemble
Section titled âVue dâensembleâObjectif : Comprendre pourquoi utiliser un framework, installer lâenvironnement, crĂ©er un premier composant interactif
Partie 1 : LâĂ©volution des frameworks JavaScript
Section titled âPartie 1 : LâĂ©volution des frameworks JavaScriptâPourquoi des frameworks JavaScript ?
Section titled âPourquoi des frameworks JavaScript ?âAu dĂ©but Ă©tait le JavaScript vanillaâŠ
Dans les années 2000-2010, créer une interface web interactive complexe en JavaScript pur était fastidieux :
- Manipulation manuelle du DOM (
document.getElementById,innerHTML) - Gestion complexe de lâĂ©tat de lâapplication
- Code répétitif et difficile à maintenir
- Synchronisation manuelle entre données et interface
ProblĂšmes concrets :
- Quand une donnée change, vous devez mettre à jour manuellement tous les éléments HTML concernés
- Le code devient rapidement un plat de spaghettis
- Difficile de réutiliser des composants
- Bugs frĂ©quents (oubli de mise Ă jour, incohĂ©rences dâĂ©tat)
Les frameworks résolvent ces problÚmes en apportant :
- RĂ©activitĂ© : lâinterface se met Ă jour automatiquement quand les donnĂ©es changent
- Composants : blocs réutilisables et isolés
- Architecture : structure claire pour organiser le code
- Outils : écosystÚme de développement performant
Timeline des frameworks JavaScript
Section titled âTimeline des frameworks JavaScriptâ2006 : jQuery
- Premier grand succĂšs pour simplifier le JavaScript
- Manipulation du DOM simplifiée
- Mais toujours manipulation manuelle, pas de composants
- Encore utilisé sur ~70% des sites web (legacy)
2010 : Backbone.js / Knockout.js
- Premiers frameworks avec architecture MVC (ModĂšle-Vue-ContrĂŽleur)
- Introduction du data-binding basique
- Fondations des concepts modernes
2010 : AngularJS (Angular 1)
- Premier framework âbatteries includedâ par Google
- Two-way data binding révolutionnaire
- Complexe et parfois lent
2013 : React
- Créé par Facebook
- Révolution : Virtual DOM et composants fonctionnels
- âLearn once, write anywhereâ
- Devient rapidement le leader du marché
2014 : Vue.js
- Créé par Evan You (ex-Google)
- Ăquilibre entre Angular et React
- Plus simple dâaccĂšs, syntax template familiĂšre
- TrĂšs populaire en Asie et en Europe
2016 : Angular (2+)
- Réécriture complĂšte dâAngularJS
- TypeScript obligatoire
- Plus performant mais courbe dâapprentissage raide
- Utilisé surtout en entreprise
2019 : Svelte
- Créé par Rich Harris (NYT)
- Approche radicalement différente : compilation au lieu de runtime
- Syntaxe proche du HTML/CSS/JS pur
- Performances optimales
- Courbe dâapprentissage douce
2023-2024 : Nouvelles vagues
- Solid.js, Qwik : optimisations extrĂȘmes
- Astro : architecture multi-framework
- Ăvolution continue de lâĂ©cosystĂšme
Partie 2 : Panorama des options actuelles
Section titled âPartie 2 : Panorama des options actuellesâComparaison objective des principaux frameworks
Section titled âComparaison objective des principaux frameworksâ| Framework | CrĂ©ateur | Philosophie | Points forts | Points faibles |
|---|---|---|---|---|
| React | Meta/Facebook | Librairie UI avec JSX | ĂcosystĂšme immense, jobs nombreux, communautĂ© | Courbe dâapprentissage (hooks), boilerplate |
| Vue | Evan You | Framework progressif | ĂquilibrĂ©, documentation excellente, flexible | Moins dâoffres dâemploi que React |
| Angular | Framework complet | Structure forte, TypeScript natif, tooling | Lourd, complexe pour débutants | |
| Svelte | Rich Harris | Compilateur | Syntax simple, performances, peu de code | ĂcosystĂšme plus petit, moins de jobs |
React (le leader du marché)
Section titled âReact (le leader du marchĂ©)âConcept clĂ© : Virtual DOM et composants fonctionnels
import { useState } from 'react';
function BoutonInteractif() { const [couleur, setCouleur] = useState('bleu');
return ( <button onClick={() => setCouleur(couleur === 'bleu' ? 'rouge' : 'bleu')}> Je suis {couleur} </button> );}Forces :
- Immense communauté et écosystÚme
- React Native pour mobile
- Demandé sur le marché du travail
Faiblesses pédagogiques :
- JSX peut dérouter les débutants
- Hooks (useState, useEffectâŠ) pas intuitifs
- Boilerplate important
Vue (lâĂ©quilibre)
Section titled âVue (lâĂ©quilibre)âConcept clĂ© : Templates HTML augmentĂ©s
<template> <button @click="changerCouleur">Je suis {{ couleur }}</button></template>
<script>export default { data() { return { couleur: 'bleu' }; }, methods: { changerCouleur() { this.couleur = this.couleur === 'bleu' ? 'rouge' : 'bleu'; } }};</script>Forces :
- Syntax familiÚre (HTML, CSS, JS séparés)
- Options API simple pour débutants
- Documentation exemplaire
Faiblesses pédagogiques :
thispeut ĂȘtre confus- Deux APIs (Options vs Composition)
Svelte (le compilateur)
Section titled âSvelte (le compilateur)âConcept clĂ© : Pas de runtime, compilation en JavaScript pur
<script> let couleur = 'bleu';
function changerCouleur() { couleur = couleur === 'bleu' ? 'rouge' : 'bleu'; }</script>
<button on:click={changerCouleur}> Je suis {couleur}</button>Forces :
- Syntax la plus proche du HTML/CSS/JS natif
- Réactivité sans hooks ni
this - Performances optimales (pas de Virtual DOM)
- Moins de code, plus de clarté
Faiblesses :
- ĂcosystĂšme plus petit
- Moins de ressources dâapprentissage
- Moins demandé sur le marché du travail
Pourquoi Svelte pour ce cours ?
Section titled âPourquoi Svelte pour ce cours ?âRaisons pĂ©dagogiques :
- Syntax intuitive : ressemble au HTML/CSS/JS que vous connaissez dĂ©jĂ
- Réactivité simple : pas de hooks, pas de
this, juste des variables - Moins de concepts à apprendre : focus sur la création, pas la plomberie
- Feedback rapide : code concis = expérimentation facilitée
Ce nâest pas un choix dogmatique :
- Les concepts appris (composants, réactivité, événements) se transfÚrent à React/Vue
- AprĂšs ce cours, vous aurez les fondations pour apprendre nâimporte quel framework
- Le but est dâapprendre Ă penser en composants interactifs, pas de devenir expert Svelte
Métaphore pour votre profil de Master MM :
- Svelte est Ă React ce que Blender est Ă Maya
- Outil plus accessible pour apprendre, compétences transférables
- Une fois les concepts maĂźtrisĂ©s, passer Ă dâautres outils est plus facile
Partie 3 : Installation et setup
Section titled âPartie 3 : Installation et setupâPrĂ©requis
Section titled âPrĂ©requisâAvant de commencer, vĂ©rifiez que vous avez :
1. Node.js installé
node --version# Doit afficher v18+ ou v20+Si pas installé : nodejs.org (version LTS recommandée)
2. Un éditeur de code
- VSCode (recommandé)
- PhpStorm
- Autre éditeur moderne
3. Extension Svelte (si VSCode)
Installer lâextension âSvelte for VS Codeâ par Svelte
4. Un terminal fonctionnel
- Terminal intégré de votre éditeur
- Terminal systĂšme (Terminal.app sur Mac, PowerShell sur Windows)
Créer le projet
Section titled âCrĂ©er le projetâOuvrir un terminal et exĂ©cuter :
npm create vite@latest mon-projet-rtmf -- --template svelteCe que cette commande fait :
npm create vite@latest: utilise Vite (outil de build moderne et rapide)mon-projet-rtmf: nom de votre projet (modifiable)--template svelte: utilise le template Svelte
Installer les dépendances :
cd mon-projet-rtmfnpm installLancer le serveur de développement :
npm run devVérifier que ça fonctionne :
- Ouvrir
http://localhost:5173dans votre navigateur - Vous devriez voir la page dâaccueil Vite + Svelte
Astuce : Laissez le serveur tourner pendant que vous travaillez. Les changements sâaffichent automatiquement (hot reload).
Structure du projet
Section titled âStructure du projetâExplorer la structure créée :
mon-projet-rtmf/âââ public/ # Fichiers statiques (images, fonts...)âââ src/â âââ lib/ # Composants rĂ©utilisables (vide au dĂ©part)â âââ App.svelte # Composant principalâ âââ main.js # Point d'entrĂ©e JavaScriptâ âââ app.css # Styles globauxâââ index.html # Page HTML de baseâââ package.json # Configuration et dĂ©pendancesâââ vite.config.js # Configuration ViteFichiers clĂ©s :
index.html : Point dâentrĂ©e HTML
<!DOCTYPE html><html lang="fr"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Mon Projet RTMF1M</title> </head> <body> <div id="app"></div> <script type="module" src="/src/main.js"></script> </body></html>src/main.js : Bootstrap de lâapplication
import './app.css'import App from './App.svelte'
const app = new App({ target: document.getElementById('app'),})
export default appsrc/App.svelte : Composant racine (nous allons le modifier)
Partie 4 : Premier composant interactif
Section titled âPartie 4 : Premier composant interactifâObjectif
Section titled âObjectifâCrĂ©er un bouton qui change de couleur au clic, pour comprendre :
- La structure dâun composant Svelte
- La réactivité automatique
- Les événements
- Les styles scopés
Ătape 1 : CrĂ©er le composant
Section titled âĂtape 1 : CrĂ©er le composantâCrĂ©er le dossier et le fichier :
mkdir src/libCréer src/lib/BoutonInteractif.svelte avec ce contenu :
<script> // Variable réactive : quand elle change, l'interface se met à jour automatiquement let couleur = 'bleu';
// Fonction déclenchée au clic function changerCouleur() { couleur = couleur === 'bleu' ? 'rouge' : 'bleu'; }</script>
<!-- Template HTML : le bouton affiche la couleur actuelle --><button class={couleur} on:click={changerCouleur}> Je suis {couleur}</button>
<!-- Styles scopés : ne s'appliquent qu'à ce composant --><style> button { padding: 1rem 2rem; font-size: 1.2rem; border: none; border-radius: 8px; cursor: pointer; transition: all 0.3s ease; font-weight: bold; }
.bleu { background: #3498db; color: white; }
.rouge { background: #e74c3c; color: white; }
button:hover { transform: scale(1.05); box-shadow: 0 4px 12px rgba(0,0,0,0.15); }
button:active { transform: scale(0.98); }</style>Ătape 2 : Utiliser le composant
Section titled âĂtape 2 : Utiliser le composantâModifier src/App.svelte :
<script> import BoutonInteractif from './lib/BoutonInteractif.svelte';</script>
<main> <h1>Mon premier composant interactif</h1> <p>Cliquez sur le bouton pour changer sa couleur :</p> <BoutonInteractif /></main>
<style> main { max-width: 600px; margin: 0 auto; padding: 2rem; text-align: center; }
h1 { color: #333; margin-bottom: 1rem; }
p { color: #666; margin-bottom: 2rem; }</style>Sauvegarder et vérifier dans le navigateur : le bouton devrait apparaßtre et changer de couleur au clic.
Ătape 3 : Comprendre ce quâon vient de faire
Section titled âĂtape 3 : Comprendre ce quâon vient de faireâStructure dâun composant Svelte :
Un fichier .svelte contient 3 sections :
-
<script>: Logique JavaScript- Variables (données)
- Fonctions (comportements)
- Imports
-
Template HTML : Structure et affichage
- HTML standard
- Expressions
{variable}pour afficher des données - Directives
on:event={fonction}pour les événements - Directives
class={variable}pour classes dynamiques
-
<style>: Apparence CSS- CSS standard
- ScopĂ© automatiquement : ne sâapplique quâĂ ce composant
Concepts clés introduits :
1. Réactivité automatique
Section titled â1. RĂ©activitĂ© automatiqueâlet couleur = 'bleu'; // Variable rĂ©active
function changerCouleur() { couleur = 'rouge'; // Simple assignation â interface mise Ă jour automatiquement}Magie Svelte : Pas besoin de setState (React) ou this.$set (Vue).
Une simple assignation (=) dĂ©clenche la mise Ă jour de lâinterface.
2. ĂvĂ©nements
Section titled â2. ĂvĂ©nementsâ<button on:click={changerCouleur}>Syntax : on:nomEvenement={fonction}
ĂvĂ©nements courants :
on:click: clic de sourison:input: saisie de texteon:submit: envoi de formulaireon:mouseover: survolon:keydown: touche clavier pressée
3. Classes dynamiques
Section titled â3. Classes dynamiquesâ<button class={couleur}>La classe CSS appliquĂ©e change en fonction de la variable couleur.
Variante pour toggle :
<button class:active={estActif}>Ajoute la classe active seulement si estActif est true.
4. Interpolation de variables
Section titled â4. Interpolation de variablesâJe suis {couleur}Affiche la valeur de la variable dans le HTML.
5. Styles scopés
Section titled â5. Styles scopĂ©sâbutton { /* Ne s'applique qu'aux <button> de ce composant */}Svelte ajoute automatiquement des classes uniques pour isoler les styles.
Ătape 4 : ExpĂ©rimentation guidĂ©e
Section titled âĂtape 4 : ExpĂ©rimentation guidĂ©eâChallenges Ă essayer ensemble :
Challenge 1 : Ajouter une troisiĂšme couleur
Modifier la fonction pour alterner entre bleu, rouge et vert :
function changerCouleur() { if (couleur === 'bleu') { couleur = 'rouge'; } else if (couleur === 'rouge') { couleur = 'vert'; } else { couleur = 'bleu'; }}Et ajouter le style :
.vert { background: #2ecc71; color: white;}Challenge 2 : Ajouter un compteur de clics
<script> let couleur = 'bleu'; let clics = 0;
function changerCouleur() { couleur = couleur === 'bleu' ? 'rouge' : 'bleu'; clics += 1; // Incrémenter le compteur }</script>
<button class={couleur} on:click={changerCouleur}> Je suis {couleur} ({clics} clics)</button>Challenge 3 : Changer la transition
Modifier la durĂ©e ou lâeasing :
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);Partie 5 : Checklist et prochaines étapes
Section titled âPartie 5 : Checklist et prochaines Ă©tapesâVĂ©rification de fin de sĂ©ance
Section titled âVĂ©rification de fin de sĂ©anceâ- Environnement de dĂ©veloppement fonctionnel
- Serveur Vite qui tourne et affiche votre page
- Premier composant créé et testé
- Compréhension de la réactivité Svelte
- Git initialisé (optionnel mais recommandé)
Pour initialiser Git :
git initgit add .git commit -m "Initial commit - Premier composant Svelte"Mission technique (optionnelle)
Section titled âMission technique (optionnelle)âExpĂ©rimenter avec le bouton interactif :
-
Ajoutez des interactions :
- Double-clic change une autre propriété
- Hover affiche un message
- Maintenir le clic 2 secondes déclenche un effet
-
Explorez dâautres Ă©vĂ©nements :
on:mouseovereton:mouseouton:keydown(si le bouton a le focus)
-
Créez un deuxiÚme composant :
- Copiez
BoutonInteractif.svelte - Modifiez-le pour afficher un compteur
- Utilisez-le dans
App.svelte
- Copiez
-
Jouez avec les styles :
- Animations CSS
@keyframes - Dégradés de couleurs
- Ombres portées
- Animations CSS
Ressources pour approfondir
Section titled âRessources pour approfondirâDocumentation Svelte :
- Tutorial officiel interactif - Excellent point de départ
- Documentation API - Référence complÚte
- Exemples - Cas dâusage concrets
Outils de développement :
- Svelte REPL - Tester du code en ligne
- Svelte DevTools - Extension navigateur
Lectures complémentaires :
- Ressources pédagogiques - Tutoriels et outils
- Eloquent JavaScript - Approfondir JavaScript
Prochaines séances
Section titled âProchaines sĂ©ancesâSĂ©ance 2 : Discussion collective
- Partage des dĂ©couvertes dâĆuvres
- Identification des territoires
- Premiers concepts de projets
Module 2 : Fondamentaux techniques
- Composants, props, événements
- Réactivité et stores
- Interactions avancées
- Animations et transitions
Concepts Ă retenir
Section titled âConcepts Ă retenirâPourquoi un framework JavaScript ?
Section titled âPourquoi un framework JavaScript ?â- Gestion automatique de lâĂ©tat et de lâinterface
- Architecture en composants réutilisables
- Code plus maintenable et scalable
Pourquoi Svelte pour ce cours ?
Section titled âPourquoi Svelte pour ce cours ?â- Syntax intuitive proche du HTML/CSS/JS natif
- Réactivité simple sans hooks ni API complexe
- Performances optimales
- Focus sur la création, pas la plomberie
Structure dâun composant Svelte
Section titled âStructure dâun composant Svelteâ<script>: logique JavaScript- Template HTML : structure et affichage
<style>: CSS scopé automatiquement
Réactivité Svelte
Section titled âRĂ©activitĂ© Svelteâ- Simple assignation
=met Ă jour lâinterface - Pas de
setState, pas dethis, juste du JavaScript