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 message d'erreur de webpack indique que nous pourrions avoir besoin d'un <i>chargeur</i> approprié pour empaqueter correctement le fichier <i>App.js</i>. Par défaut, webpack ne sait traiter que le JavaScript pur. Bien que nous ne nous en rendions peut-être plus compte, nous utilisons [JSX](https://facebook.github.io/jsx/) pour rendre nos vues dans React. Pour illustrer cela, le code suivant n'est pas du JavaScript ordinaire:
264
+
265
+
```js
266
+
constApp= () => {
267
+
return (
268
+
<div>
269
+
hello webpack
270
+
</div>
271
+
)
272
+
}
273
+
```
274
+
275
+
La syntaxe utilisée ci-dessus provient de JSX et nous offre une manière alternative de définir un élément React pour une balise HTML <i>div</i>.
276
+
277
+
Nous pouvons utiliser des [chargeurs (loaders)](https://webpack.js.org/concepts/loaders/) pour informer webpack des fichiers qui doivent être traités avant d'être empaquetés.
278
+
279
+
Configurons un chargeur pour notre application qui transforme le code JSX en JavaScript ordinaire:
280
+
281
+
```js
282
+
constpath=require('path')
283
+
284
+
constconfig= () => {
285
+
return {
286
+
entry:'./src/index.js',
287
+
output: {
288
+
path:path.resolve(__dirname, 'build'),
289
+
filename:'main.js'
290
+
},
291
+
// highlight-start
292
+
module: {
293
+
rules: [
294
+
{
295
+
test:/\.js$/,
296
+
loader:'babel-loader',
297
+
options: {
298
+
presets: ['@babel/preset-react'],
299
+
},
300
+
},
301
+
],
302
+
},
303
+
// highlight-end
304
+
}
305
+
}
306
+
307
+
module.exports= config
308
+
```
309
+
310
+
Les chargeurs sont définis sous la propriété <i>module</i> dans le tableau <i>rules</i> (règles).
311
+
312
+
La définition d'un seul chargeur se compose de trois parties:
313
+
314
+
```js
315
+
{
316
+
test:/\.js$/,
317
+
loader:'babel-loader',
318
+
options: {
319
+
presets: ['@babel/preset-react']
320
+
}
321
+
}
322
+
```
323
+
324
+
La propriété <i>test</i> spécifie que le chargeur est destiné aux fichiers dont les noms se terminent par <i>.js</i>. La propriété <i>loader</i> spécifie que le traitement de ces fichiers sera effectué avec [babel-loader](https://github.com/babel/babel-loader). La propriété <i>options</i> est utilisée pour spécifier des paramètres pour le chargeur, qui configurent sa fonctionnalité.
325
+
326
+
Installons le chargeur et ses paquets requis en tant que <i>dépendance de développement</i>:
L'empaquetage de l'application réussira désormais.
333
+
334
+
Si nous apportons des modifications au composant <i>App</i> et examinons le code empaqueté, nous remarquons que la version empaquetée du composant ressemble à ceci:
Comme nous pouvons le voir dans l'exemple ci-dessus, les éléments React qui ont été écrits en JSX sont maintenant créés avec du JavaScript ordinaire en utilisant la fonction [createElement](https://react.dev/reference/react/createElement) de React.
346
+
347
+
Vous pouvez tester l'application empaquetée en ouvrant le fichier <i>build/index.html</i> avec la fonctionnalité <i>ouvrir le fichier</i> de votre navigateur:
Il convient de noter que si le code source de l'application empaquetée utilise <i>async/await</i>, le navigateur ne rendra rien sur certains navigateurs. [Rechercher le message d'erreur dans la console](https://stackoverflow.com/questions/33527653/babel-6-regeneratorruntime-is-not-defined) éclairera le problème. Avec la [solution précédente](https://babeljs.io/docs/en/babel-polyfill/) étant obsolète, nous devons maintenant installer deux dépendances manquantes, à savoir [core-js](https://www.npmjs.com/package/core-js) et [regenerator-runtime](https://www.npmjs.com/package/regenerator-runtime):
352
+
353
+
```bash
354
+
npm install core-js regenerator-runtime
355
+
```
356
+
357
+
Vous devez importer ces dépendances en haut du fichier <i>index.js</i>:
358
+
359
+
```js
360
+
import'core-js/stable/index.js'
361
+
import'regenerator-runtime/runtime.js'
362
+
```
363
+
364
+
Notre configuration contient presque tout ce dont nous avons besoin pour le développement React.
365
+
366
+
### Transpilers
367
+
368
+
Le processus de transformation du code d'une forme de JavaScript à une autre est appelé [transpilation](https://en.wiktionary.org/wiki/transpile). La définition générale du terme est de compiler du code source en le transformant d'un langage à un autre.
369
+
370
+
En utilisant la configuration de la section précédente, nous sommes en train de <i>transpiler</i> le code contenant JSX en JavaScript ordinaire avec l'aide de [babel](https://babeljs.io/), qui est actuellement l'outil le plus populaire pour ce travail.
371
+
372
+
Comme mentionné dans la partie 1, la plupart des navigateurs ne prennent pas en charge les dernières fonctionnalités introduites dans ES6 et ES7, et pour cette raison, le code est généralement transpilé vers une version de JavaScript qui implémente la norme ES5.
373
+
374
+
Le processus de transpilation exécuté par Babel est défini avec des <i>plugins</i>. En pratique, la plupart des développeurs utilisent des [presets](https://babeljs.io/docs/plugins/) prêts à l'emploi qui sont des groupes de plugins préconfigurés.
375
+
376
+
Actuellement, nous utilisons le preset [@babel/preset-react](https://babeljs.io/docs/plugins/preset-react/) pour transpiler le code source de notre application:
0 commit comments