Met à jour la carte

This commit is contained in:
Yannick François
2023-01-22 11:32:19 +01:00
parent 763d256f51
commit ad90636cd4
4 changed files with 562 additions and 71 deletions
+12 -14
View File
@@ -5,6 +5,8 @@ title: Mardi 16 février 2021
Le moment où Ronan Amicel partage une exploration à propos des modules JavaScript.
_Le 16 février à 21:02_
> Je nai pas de livre à recommander, mais il y a quelques mois je me suis moi-même retrouvé à devoir faire (et donc comprendre, on ne se refait pas) plus de choses que je ne laurais voulu avec JS. Ces histoires de modules, ce n’était pas clair pour moi : AMD, CommonJS, Bowserify, Node.js, ES6... Donc un matin je me suis posé et jai essayé de morienter dans ce bazar, et jai pris quelques notes.
>
> Au départ, le langage navait pas de mécanismes pour découper le code en modules.
@@ -19,20 +21,15 @@ _Le 16 février à 21:02_
>
> Et la seule façon de créer une nouvelle portée (scope) en JS était de créer une fonction.
>
> Lutilisation du pattern dit « IIFE » (https://en.wikipedia.org/wiki/Immediately_invoked_function_expression) permet lencapsulation de variables et de fonctions privées dans le scope dune fonction anonyme immédiatement invoquée. La valeur de retour de la fonction permet d'exposer les variables et fonctions publiques du « module ».
>
> WikipediaWikipedia
> Immediately invoked function expression
> An immediately invoked function expression (or IIFE, pronounced "iffy", IPA /ˈɪf.i/) is a JavaScript programming language idiom which produces a lexical scope using JavaScript's function scoping.
> Immediately invoked function expressions can be used to avoid variable hoisting from within blocks, protect against polluting the global environment and simultaneously allow public access to methods while retaining privacy for variables defined within the function.
> Lutilisation du pattern dit « IIFE » ([Immediately Invokeed Funtion Expression](https://en.wikipedia.org/wiki/Immediately_invoked_function_expression) permet lencapsulation de variables et de fonctions privées dans le scope dune fonction anonyme immédiatement invoquée. La valeur de retour de la fonction permet d'exposer les variables et fonctions publiques du « module ».
>
> Cela donne une bonne isolation, mais on introduit quand même un objet dans lespace de noms global, et ça ne résoud pas le problème de lordre de chargement et des dépendances.
>
> Arrive ensuite CommonJS (2009-2014) https://en.wikipedia.org/wiki/CommonJS (edited)
> Arrive ensuite [CommonJS](https://en.wikipedia.org/wiki/CommonJS) (2009-2014)
>
> CommonJS was a project with the goal to establish conventions on module ecosystem for JavaScript outside of the web browser. The primary reason for its creation was a major lack of commonly accepted form of JavaScript scripts module units which could be reusable in environments different from that provided by a conventional web browser e.g. web server or native desktop applications which run JavaScript scripts.
>
> Avec CommonJS, chaque fichier est un module. Il définit explicitement ses exports, via la variable module.exports, et ses imports via la fonction require().
> Avec CommonJS, chaque fichier est un module. Il définit explicitement ses exports, via la variable module.exports, et ses imports via la fonction `require()`.
>
> Les système de modules de Node ressemble beacoup à CommonJS.
>
@@ -44,7 +41,7 @@ _Le 16 février à 21:02_
>
> Donc des gens ont voulu faire une variante « universelle » (UMD) pour supporter les deux à la fois.
>
> En 2015, après des années de stagnation, le langage a une grosse mise à jour : ES6 alias ES2015 https://en.wikipedia.org/wiki/ECMAScript#6th_Edition_%E2%80%93_ECMAScript_2015 (edited)
> En 2015, après des années de stagnation, le langage a une grosse mise à jour : ES6 alias [ES2015](https://en.wikipedia.org/wiki/ECMAScript#6th_Edition_%E2%80%93_ECMAScript_2015)
>
> Avec ES6 le langage acquiert un support natif des modules avec les mots-clés import et export.
>
@@ -52,11 +49,12 @@ _Le 16 février à 21:02_
> <script type=module src='toto.js'></script>
>
> Mais tout ça nest supporté que dans les navigateurs modernes :
> - Safari 10.1
> - Chrome 61
> - Firefox 60
> - Edge 16
> - Mais pas IE11 !
>
> - Safari 10.1
> - Chrome 61
> - Firefox 60
> - Edge 16
> - Mais pas IE11 !
>
> Donc en pratique, pour utiliser du code JS en modules (CommonJS ou ES2015) dans le navigateur, on peut passer par un outil qui va assembler tous les modules dans un seul gros fichier JS en tenant compte des dépendances : un bundler.
>