Skip to content

Commit 0baf546

Browse files
committed
Translation in french part7d line 306
1 parent d9ad2b7 commit 0baf546

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed

src/content/7/fr/part7d.md

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,137 @@ Nous avons encore besoin du fichier <i>build/index.html</i> qui servira de "page
254254
</html>
255255
```
256256

257+
Lorsque nous empaquetons notre application, nous rencontrons le problème suivant:
258+
259+
![terminal webpack échec chargeur nécessaire](../../images/7/21x.png)
260+
261+
### Chargeurs (Loaders)
262+
263+
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+
const App = () => {
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+
const path = require('path')
283+
284+
const config = () => {
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>:
327+
328+
```bash
329+
npm install @babel/core babel-loader @babel/preset-react --save-dev
330+
```
331+
332+
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:
335+
336+
```js
337+
const App = () =>
338+
react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(
339+
'div',
340+
null,
341+
'hello webpack'
342+
)
343+
```
344+
345+
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:
348+
349+
![navigateur hello webpack](../../images/7/22.png)
350+
351+
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:
377+
378+
```js
379+
{
380+
test: /\.js$/,
381+
loader: 'babel-loader',
382+
options: {
383+
presets: ['@babel/preset-react'] // highlight-line
384+
}
385+
}
386+
```
387+
257388

258389

259390
</div>

0 commit comments

Comments
 (0)