You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Le navigateur extrait et évalue automatiquement le module importé (et, le cas échéant, ses importations), puis exécute le script.
59
59
60
-
<<<<<<< HEAD
61
-
```warn header="Les modules fonctionnent uniquement via HTTP(s), pas dans des fichiers locaux"
62
-
Si vous essayez d'ouvrir une page Web localement, via le protocole `file: //`, vous verrez que les directives `import / export` ne fonctionnent pas. Utilisez un serveur Web local, tel que [static-server](https://www.npmjs.com/package/static-server#getting-started) ou utilisez la fonctionnalité "live server" de votre éditeur, telle que VS Code [Live Server Extension](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) pour tester les modules.
63
-
=======
64
-
```warn header="Modules work only via HTTP(s), not locally"
65
-
If you try to open a web-page locally, via `file://` protocol, you'll find that `import/export` directives don't work. Use a local web-server, such as [static-server](https://www.npmjs.com/package/static-server#getting-started) or use the "live server" capability of your editor, such as VS Code [Live Server Extension](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) to test modules.
66
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
60
+
```warn header="Les modules fonctionnent uniquement via HTTP(s), pas localement"
61
+
Si vous essayez d'ouvrir une page Web localement, via le protocole `file://`, vous verrez que les directives `import/export` ne fonctionnent pas. Utilisez un serveur Web local, tel que [static-server](https://www.npmjs.com/package/static-server#getting-started) ou utilisez la fonctionnalité "live server" de votre éditeur, tel que VS Code [Live Server Extension](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) pour tester les modules.
67
62
```
68
63
69
64
## Caractéristiques du module de base
@@ -74,11 +69,7 @@ Il existe des fonctionnalités de base, valables à la fois pour le navigateur e
74
69
75
70
### Toujours en mode "use strict"
76
71
77
-
<<<<<<< HEAD
78
-
Les modules utilisent `use strict`, par défaut. Par exemple. assigner à une variable non déclarée donnera une erreur.
79
-
=======
80
-
Modules always work in strict mode. E.g. assigning to an undeclared variable will give an error.
81
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
72
+
Les modules fonctionnent toujours en mode strict. Par exemple. l'affectation à une variable non déclarée donnera une erreur.
82
73
83
74
```html run
84
75
<scripttype="module">
@@ -90,38 +81,24 @@ Modules always work in strict mode. E.g. assigning to an undeclared variable wil
90
81
91
82
Chaque module a sa propre portée globale. En d'autres termes, les variables et les fonctions globales d'un module ne sont pas visibles dans les autres scripts.
92
83
93
-
<<<<<<< HEAD
94
-
Dans l'exemple ci-dessous, deux scripts sont importés et `hello.js` essaie d'utiliser la variable `user` déclarée dans `user.js` et échoue:
84
+
Dans l'exemple ci-dessous, deux scripts sont importés et `hello.js` essaie d'utiliser la variable `user` déclarée dans `user.js`. Il échoue, car il s'agit d'un module distinct (vous verrez l'erreur dans la console) :
Les modules sont censés `export` ce qui doit être accessible de l'extérieur et `import` ce dont ils ont besoin.
88
+
Les modules doivent `export` ce qu'ils veulent être accessible de l'extérieur et `import` ce dont ils ont besoin.
99
89
100
-
Nous devons donc importer `user.js` dans `hello.js` et en tirer les fonctionnalités requises au lieu de nous fier à des variables globales.
101
-
=======
102
-
In the example below, two scripts are imported, and `hello.js` tries to use `user` variable declared in `user.js`. It fails, because it's a separate module (you'll see the error in the console):
90
+
-`user.js` devrait exporter la variable `user`.
91
+
-`hello.js` devrait l'importer depuis le module `user.js`.
Dans le navigateur, un environnement indépendant existe également pour chaque `<script type ="module">`:
120
-
=======
121
-
In the browser, if we talk about HTML pages, independent top-level scope also exists for each `<script type="module">`.
99
+
Dans le navigateur, si nous parlons de pages HTML, une portée de niveau supérieur indépendante existe également pour chaque `<script type="module">`.
122
100
123
-
Here are two scripts on the same page, both `type="module"`. They don't see each other's top-level variables:
124
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
101
+
Voici deux scripts sur la même page, tous deux `type="module"`. Ils ne voient pas les variables de niveau supérieur de l'autre :
125
102
126
103
```html run
127
104
<scripttype="module">
@@ -136,31 +113,21 @@ Here are two scripts on the same page, both `type="module"`. They don't see each
136
113
</script>
137
114
```
138
115
139
-
<<<<<<< HEAD
140
-
Si nous devons réellement créer une variable globale, nous pouvons l’affecter explicitement à `window` et y accéder en tant que `window.user`. Mais c’est une exception qui nécessite une bonne raison.
141
-
=======
142
116
```smart
143
-
In the browser, we can make a variable window-level global by explicitly assigning it to a `window` property, e.g. `window.user = "John"`.
117
+
Dans le navigateur, nous pouvons rendre une variable globale au niveau de la fenêtre en l'affectant explicitement à une propriété `window`, par exemple `window.user = "John"`.
144
118
145
-
Then all scripts will see it, both with `type="module"` and without it.
119
+
Ensuite, tous les scripts la verront, à la fois avec `type="module"` et sans.
146
120
147
-
That said, making such global variables is frowned upon. Please try to avoid them.
121
+
Cela dit, faire de telles variables globales est mal vu. Veuillez essayer de les éviter.
148
122
```
149
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
150
123
151
124
### Un code de module est chargé la première fois lorsqu'il est importé
152
125
153
-
<<<<<<< HEAD
154
-
Si le même module est importé dans plusieurs autres emplacements, son code n'est exécuté que la première fois, puis les exportations sont données à tous les importateurs.
126
+
Si le même module est importé dans plusieurs autres modules, son code n'est exécuté qu'une seule fois, lors de la première importation. Ensuite, ses exportations sont données à tous les autres importateurs.
155
127
156
-
Cela a des conséquences importantes. Voyons cela sur des exemples.
157
-
=======
158
-
If the same module is imported into multiple other modules, its code is executed only once, upon the first import. Then its exports are given to all further importers.
128
+
L'évaluation ponctuelle a des conséquences importantes, dont nous devons être conscients.
159
129
160
-
The one-time evaluation has important consequences, that we should be aware of.
161
-
162
-
Let's see a couple of examples.
163
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
130
+
Voyons quelques exemples.
164
131
165
132
Premièrement, si exécuter un code de module entraîne des effets secondaires, comme afficher un message, l'importer plusieurs fois ne le déclenchera qu'une seule fois - la première fois:
166
133
@@ -179,17 +146,11 @@ import `./alert.js`; // le module est chargé
179
146
import`./alert.js`; // (n'affiche rien)
180
147
```
181
148
182
-
<<<<<<< HEAD
183
-
En pratique, le code dans l'environnement global du module est principalement utilisé pour l'initialisation, la création de structures de données internes mais, si nous voulons que quelque chose soit réutilisable, exportez-le.
184
-
185
-
Maintenant, un exemple plus avancé.
186
-
=======
187
-
The second import shows nothing, because the module has already been evaluated.
149
+
La deuxième importation ne montre rien, car le module a déjà été évalué.
188
150
189
-
There's a rule: top-level module code should be used for initialization, creation of module-specific internal data structures. If we need to make something callable multiple times - we should export it as a function, like we did with `sayHi`above.
151
+
Il y a une règle : le code du module de niveau supérieur doit être utilisé pour l'initialisation, la création de structures de données internes spécifiques au module. Si nous devons rendre quelque chose appelable plusieurs fois, nous devons l'exporter en tant que fonction, comme nous l'avons fait avec `sayHi`ci-dessus.
190
152
191
-
Now, let's consider a deeper example.
192
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
153
+
Maintenant, considérons un exemple plus profond.
193
154
194
155
Disons qu'un module exporte un objet:
195
156
@@ -214,38 +175,25 @@ import {admin} from './admin.js';
214
175
alert(admin.name); // Pete
215
176
216
177
*!*
217
-
<<<<<<<HEAD
218
-
// 1.js et 2.js ont importé le même objet
178
+
// 1.js et 2.js font référence au même objet admin
219
179
// Les modifications apportées dans 1.js sont visibles dans 2.js
220
180
*/!*
221
181
```
222
182
223
-
Donc, répétons-le, le module n’est exécuté qu’une fois. Les exportations sont générées, puis partagées entre les importateurs. Par conséquent, si quelque chose change d'objet `admin`, les autres modules le verront.
224
-
225
-
Un tel comportement permet de configurer des modules lors de la première importation. Nous pouvons configurer ses propriétés une fois, puis dans les importations ultérieures, il est prêt.
226
-
227
-
Par exemple, le module `admin.js` peut fournir certaines fonctionnalités, mais attendez-vous à ce que les informations d'identification entrent dans l'objet `admin` de l'extérieur:
228
-
=======
229
-
// Both 1.js and 2.js reference the same admin object
230
-
// Changes made in 1.js are visible in 2.js
231
-
*/!*
232
-
```
233
-
234
-
As you can see, when `1.js` changes the `name` property in the imported `admin`, then `2.js` can see the new `admin.name`.
183
+
Comme vous pouvez le voir, lorsque `1.js` modifie la propriété `name` dans le `admin` importé, alors `2.js` peut voir le nouveau `admin.name`.
235
184
236
-
That's exactly because the module is executed only once. Exports are generated, and then they are shared between importers, so if something changes the `admin` object, other modules will see that.
185
+
C'est précisément parce que le module n'est exécuté qu'une seule fois. Les exportations sont générées, puis partagées entre les importateurs, donc si quelque chose change l'objet `admin`, les autres modules le verront.
237
186
238
-
**Such behavior is actually very convenient, because it allows us to *configure* modules.**
187
+
**Un tel comportement est en fait très pratique, car il nous permet de *configurer* des modules.**
239
188
240
-
In other words, a module can provide a generic functionality that needs a setup. E.g. authentication needs credentials. Then it can export a configuration object expecting the outer code to assign to it.
189
+
En d'autres termes, un module peut fournir une fonctionnalité générique qui nécessite une configuration. Par exemple. l'authentification a besoin d'informations d'identification. Ensuite, il peut exporter un objet de configuration en attendant que le code externe lui soit affecté.
241
190
242
-
Here's the classical pattern:
243
-
1. A module exports some means of configuration, e.g. a configuration object.
244
-
2. On the first import we initialize it, write to its properties. The top-level application script may do that.
245
-
3. Further imports use the module.
191
+
Voici le modèle classique :
192
+
1.Un module exporte certains moyens de configuration, par exemple un objet de configuration.
193
+
2.Lors de la première importation, nous l'initialisons, écrivons dans ses propriétés. Le script d'application de niveau supérieur peut le faire.
194
+
3.D'autres importations utilisent le module.
246
195
247
-
For instance, the `admin.js` module may provide certain functionality (e.g. authentication), but expect the credentials to come into the `config` object from outside:
248
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
196
+
Par exemple, le module `admin.js` peut fournir certaines fonctionnalités (par exemple, l'authentification), mais s'attend à ce que les informations d'identification entrent dans l'objet `config` de l'extérieur :
249
197
250
198
```js
251
199
// 📁 admin.js
@@ -256,25 +204,17 @@ export function sayHi() {
256
204
}
257
205
```
258
206
259
-
<<<<<<< HEAD
260
-
Dans `init.js`, le premier script de notre application, nous définissons `admin.name`. Ensuite, tout le monde le verra, y compris les appels passés depuis `admin.js` lui-même:
261
-
=======
262
-
Here, `admin.js` exports the `config` object (initially empty, but may have default properties too).
207
+
Ici, `admin.js` exporte l'objet `config` (initialement vide, mais peut également avoir des propriétés par défaut).
263
208
264
-
Then in `init.js`, the first script of our app, we import `config` from it and set `config.user`:
265
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
209
+
Ensuite, dans `init.js`, le premier script de notre application, nous en importons `config` et définissons `config.user` :
266
210
267
211
```js
268
212
// 📁 init.js
269
213
import {config} from'./admin.js';
270
214
config.user="Pete";
271
215
```
272
216
273
-
<<<<<<< HEAD
274
-
Un autre module peut aussi voir `admin.name`:
275
-
=======
276
-
...Now the module `admin.js` is configured.
277
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
217
+
...Maintenant, le module `admin.js` est configuré.
278
218
279
219
Further importers can call it, and it correctly shows the current user:
280
220
@@ -290,20 +230,12 @@ sayHi(); // Prêt à être utilisé, *!*Pete*/!*!
290
230
291
231
L'objet `import.meta` contient les informations sur le module actuel.
292
232
293
-
<<<<<<< HEAD
294
233
Son contenu dépend de l'environnement. Dans le navigateur, il contient l'URL du script ou une URL de page Web actuelle si elle est en HTML:
295
234
296
235
```html run height=0
297
236
<scripttype="module">
298
-
alert(import.meta.url); // URL du script (URL de la page HTML)
299
-
=======
300
-
Its content depends on the environment. In the browser, it contains the URLof the script, or a current webpage URLif inside HTML:
301
-
302
-
```html run height=0
303
-
<script type="module">
304
-
alert(import.meta.url); // script URL
305
-
// for an inline script - the URL of the current HTML-page
306
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
237
+
alert(import.meta.url); // URL du script
238
+
// pour un script en ligne - l'URL de la page HTML actuelle
0 commit comments