Skip to content

Fondations techniques

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”

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

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

FrameworkCréateurPhilosophiePoints fortsPoints faibles
ReactMeta/FacebookLibrairie UI avec JSXÉcosystĂšme immense, jobs nombreux, communautĂ©Courbe d’apprentissage (hooks), boilerplate
VueEvan YouFramework progressifÉquilibrĂ©, documentation excellente, flexibleMoins d’offres d’emploi que React
AngularGoogleFramework completStructure forte, TypeScript natif, toolingLourd, complexe pour débutants
SvelteRich HarrisCompilateurSyntax simple, performances, peu de codeÉcosystùme plus petit, moins de jobs

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

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 :

  • this peut ĂȘtre confus
  • Deux APIs (Options vs Composition)

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

Raisons pédagogiques :

  1. Syntax intuitive : ressemble au HTML/CSS/JS que vous connaissez déjà
  2. Réactivité simple : pas de hooks, pas de this, juste des variables
  3. Moins de concepts à apprendre : focus sur la création, pas la plomberie
  4. 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

Avant de commencer, vérifiez que vous avez :

1. Node.js installé

Terminal window
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)

Ouvrir un terminal et exécuter :

Terminal window
npm create vite@latest mon-projet-rtmf -- --template svelte

Ce 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 :

Terminal window
cd mon-projet-rtmf
npm install

Lancer le serveur de développement :

Terminal window
npm run dev

Vérifier que ça fonctionne :

  • Ouvrir http://localhost:5173 dans 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).


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 Vite

Fichiers 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 app

src/App.svelte : Composant racine (nous allons le modifier)


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

Créer le dossier et le fichier :

Terminal window
mkdir src/lib

Cré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>

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.


Structure d’un composant Svelte :

Un fichier .svelte contient 3 sections :

  1. <script> : Logique JavaScript

    • Variables (donnĂ©es)
    • Fonctions (comportements)
    • Imports
  2. 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
  3. <style> : Apparence CSS

    • CSS standard
    • ScopĂ© automatiquement : ne s’applique qu’à ce composant

Concepts clés introduits :

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.

<button on:click={changerCouleur}>

Syntax : on:nomEvenement={fonction}

ÉvĂ©nements courants :

  • on:click : clic de souris
  • on:input : saisie de texte
  • on:submit : envoi de formulaire
  • on:mouseover : survol
  • on:keydown : touche clavier pressĂ©e
<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.

Je suis {couleur}

Affiche la valeur de la variable dans le HTML.

button {
/* Ne s'applique qu'aux <button> de ce composant */
}

Svelte ajoute automatiquement des classes uniques pour isoler les styles.


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);

  • 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 :

Terminal window
git init
git add .
git commit -m "Initial commit - Premier composant Svelte"

Expérimenter avec le bouton interactif :

  1. Ajoutez des interactions :

    • Double-clic change une autre propriĂ©tĂ©
    • Hover affiche un message
    • Maintenir le clic 2 secondes dĂ©clenche un effet
  2. Explorez d’autres Ă©vĂ©nements :

    • on:mouseover et on:mouseout
    • on:keydown (si le bouton a le focus)
  3. Créez un deuxiÚme composant :

    • Copiez BoutonInteractif.svelte
    • Modifiez-le pour afficher un compteur
    • Utilisez-le dans App.svelte
  4. Jouez avec les styles :

    • Animations CSS @keyframes
    • DĂ©gradĂ©s de couleurs
    • Ombres portĂ©es

Documentation Svelte :

Outils de développement :

Lectures complémentaires :


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

  • Gestion automatique de l’état et de l’interface
  • Architecture en composants rĂ©utilisables
  • Code plus maintenable et scalable
  • 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
  • <script> : logique JavaScript
  • Template HTML : structure et affichage
  • <style> : CSS scopĂ© automatiquement
  • Simple assignation = met Ă  jour l’interface
  • Pas de setState, pas de this, juste du JavaScript