Configuration d'un projet ES6 avec Babel et webpack –
Dans cet article, nous allons étudier la création d'une configuration de build pour gérer le JavaScript moderne (exécuté dans les navigateurs web) en utilisant Babel et webpack . Nous devons nous assurer que notre code JavaScript moderne, en particulier, est compatible avec un plus grand nombre de navigateurs.
JavaScript, comme la plupart des technologies Web, évolue constamment. Dans le bon vieux temps, nous pouvions déposer deux tags dans une page, peut-être inclure jQuery et quelques plugins, puis être bon à partir.
Cependant, depuis l'introduction d'ES6, les choses ont progressivement plus compliqué. La prise en charge par le navigateur des fonctionnalités de langage les plus récentes est souvent inégale et, au fur et à mesure que les applications JavaScript deviennent plus ambitieuses, les développeurs commencent à utiliser des modules pour organiser leur code. À son tour, cela signifie que si vous écrivez du JavaScript moderne aujourd'hui, vous devrez introduire une étape de construction dans votre processus.
Comme vous pouvez le voir dans les liens ci-dessous, la conversion de ES6 en ES5 augmente considérablement le nombre des navigateurs que nous pouvons supporter.
Le but d'un système de construction est d'automatiser le flux de travail nécessaire pour que notre code soit prêt pour les navigateurs et la production. Cela peut inclure des étapes telles que le passage de code à une norme différente, la compilation de Sass en CSS, le regroupement de fichiers, la compression et la compression de code, et bien d'autres. Pour garantir une répétition cohérente, un système de construction est nécessaire pour lancer les étapes dans une séquence connue à partir d'une seule commande.
Conditions préalables
Pour pouvoir suivre, vous devez avoir les deux nœuds. js et npm installés (ils viennent emballés ensemble). Je vous recommande d'utiliser un gestionnaire de version tel que nvm pour gérer votre installation de nœud ( voici comment procéder ), et si vous souhaitez obtenir de l'aide pour vous familiariser avec npm, consultez SitePoint didacticiel npm adapté aux débutants .Configuration
Créez un dossier racine quelque part sur votre ordinateur et naviguez dans celui-ci à partir de votre terminal / ligne de commande. Ce sera votre dossier
.
Créez un fichier package.json
avec ceci:
npm init -y
Remarque: L'indicateur -y
crée le fichier avec les paramètres par défaut, ce qui signifie que vous n'avez pas besoin de compléter les détails habituels à partir de la ligne de commande. Vous pouvez les modifier ultérieurement dans votre éditeur de code si vous le souhaitez
Dans votre dossier
créez les répertoires src
src / js
et public
. Le dossier src / js
sera où nous mettrons notre code source non traité, et le dossier public
sera où le code transpilé se terminera.
Transpiler avec Babel [19659009] Pour aller de l'avant, nous allons installer babel-cli qui fournit la possibilité de transplaner ES6 en ES5, et babel-preset-env ce qui nous permet de ciblez les versions de navigateur spécifiques avec le code transpilé.
npm installez babel-cli babel-preset-env --save-dev
Vous devriez maintenant voir ce qui suit dans votre package.json
:
"devDependencies": {
"babel-cli": "^ 6.26.0",
"babel-preset-env": "^ 1.6.1"
}
Alors que nous sommes dans le fichier package.json
changeons la section scripts
pour lire comme ceci:
"scripts": {
"build": "babel src -d public"
},
Cela nous donne la possibilité d'appeler Babel via un script, plutôt que directement depuis le terminal à chaque fois. Si vous souhaitez en savoir plus sur les scripts npm et ce qu'ils peuvent faire, consultez ce tutoriel SitePoint .
Enfin, avant de pouvoir tester si Babel fait son truc, nous devons créer un fichier de configuration .babelrc
. C'est ce que notre paquetage babel-preset-env
utilisera pour ses paramètres de transpile
Créez un nouveau fichier dans votre répertoire
appelé .babelrc
et collez ce qui suit dedans:
{
"préréglages": [
[
"env",
{
"targets": {
"browsers": ["last 2 versions", "safari >= 7"]
}
}
]
]
}
Cela configurera Babel pour qu'il transpile pour les deux dernières versions de chaque navigateur, plus Safari à la version 7 ou supérieure. D'autres options sont disponibles en fonction des navigateurs que vous devez prendre en charge.
Avec cette sauvegarde, nous pouvons maintenant tester les choses avec un exemple de fichier JavaScript qui utilise ES6. Pour les besoins de cet article, j'ai modifié une copie de leftpad pour utiliser la syntaxe ES6 dans un certain nombre d'endroits: template littéraux arrow fonctions const et let .
"use strict";
function leftPad (str, len, ch) {
const cache = [
"",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
];
str = str + "";
len = len - str.length;
if (len <= 0) renvoie str;
if (! ch && ch! == 0) ch = "";
ch = ch + "";
if (ch === "" && len < 10)
return () => {
cache [len] + str;
}
laissez pad = "";
while (true) {
si (len & 1) pad + = ch;
len >> = 1;
si (len) ch + = ch;
d'autre casse;
}
retourne `$ {pad} $ {str}`;
}
Enregistrer sous src / js / leftpad.js
et depuis votre terminal, exécutez ce qui suit:
npm run build
Si tout est comme prévu, dans votre dossier public
vous devriez maintenant trouver un nouveau fichier appelé js / leftpad.js
. Si vous l'ouvrez, vous verrez qu'il ne contient plus de syntaxe ES6 et ressemble à ceci:
"use strict";
function leftPad (str, len, ch) {
cache var = ["", " ", " ", " ", " ", " ", " ", " ", " ", " "];
str = str + "";
len = len - str.length;
if (len <= 0) renvoie str;
if (! ch && ch! == 0) ch = "";
ch = ch + "";
if (ch === "" && len < 10) return function () {
cache[len] + str;
};
var pad = "";
while (true) {
if (len & 1) pad += ch;
len >> = 1;
si (len) ch + = ch;
}
return "" + pad + str;
}
Organisation de votre code avec des modules ES6
Un module ES6 est un fichier JavaScript contenant des fonctions, des objets ou des valeurs primitives que vous souhaitez mettre à la disposition d'un autre fichier JavaScript. Vous exportez
de l'un, et importez
dans l'autre. Tout projet JavaScript moderne sérieux devrait envisager d'utiliser des modules. Ils vous permettent de décomposer votre code en unités autonomes et de rendre ainsi les choses plus faciles à maintenir; ils vous aident à éviter la pollution des espaces de noms; et ils aident à rendre votre code plus portable et réutilisable.
Alors que la majorité de la syntaxe ES6 est largement disponible dans les navigateurs modernes, ce n'est pas encore le cas avec les modules. Au moment de la rédaction, ils sont disponibles dans Chrome, Safari (y compris la dernière version iOS) et Edge; ils sont cachés derrière un drapeau dans Firefox et Opera; et ils ne sont pas disponibles (et ne le seront probablement jamais) dans IE11, ni dans la plupart des appareils mobiles.
Dans la section suivante, nous verrons comment nous pouvons intégrer des modules dans notre configuration de build.
Export [19659042Lemot-cléd'exportation est ce qui nous permet de rendre nos modules ES6 disponibles pour d'autres fichiers, et il nous donne deux options pour ce faire: named et default. Avec l'exportation nommée, vous pouvez avoir plusieurs exportations par module, et avec une exportation par défaut, vous n'en avez qu'une par module. Les exportations nommées sont particulièrement utiles lorsque vous devez exporter plusieurs valeurs. Par exemple, vous pouvez avoir un module contenant un certain nombre de fonctions utilitaires qui doivent être disponibles à divers endroits dans vos applications.
Transformons donc notre fichier leftPad
en un module, que nous pouvons ensuite require dans un second fichier.
Exportation nommée
Pour créer une exportation nommée, ajoutez ce qui suit au bas du fichier leftPad
:
export {leftPad};
Nous pouvons également supprimer la déclaration "use strict";
du haut du fichier, car les modules s'exécutent en mode strict par défaut
Defult Export
Comme il n'y a qu'une seule fonction pour être exporté dans le fichier leftPad
il pourrait être un bon candidat pour utiliser export default
à la place:
exporter la fonction par défaut leftPad (str, len, ch) {
...
}
Encore une fois, vous pouvez supprimer la déclaration "use strict";
du haut du fichier.
Import
Pour utiliser les modules exportés, nous devons maintenant les importer dans le fichier. fichier (module) dans lequel nous souhaitons les utiliser.
Pour l'option d'exportation par défaut
le module exporté peut être importé sous le nom de votre choix. Par exemple, le module leftPad
peut être importé comme suit:
import leftPad from './leftpad';
Ou il pourrait être importé comme un autre nom, comme ceci:
import pineapple_fritter de './leftpad';
Fonctionnellement, les deux fonctionneront exactement de la même manière, mais il est logique d'utiliser soit le même nom que celui exporté, soit quelque chose qui rend l'importation compréhensible - peut-être où le nom exporté se heurterait à un autre nom de variable existe dans le module de réception.
Pour l'option d'exportation nommée, nous devons importer le module en utilisant le même nom que celui dans lequel il a été exporté. Pour notre exemple de module, nous l'importons d'une manière similaire à celle que nous avons utilisée avec la syntaxe d'exportation par défaut
mais dans ce cas, nous devons envelopper le nom importé avec des accolades:
import { leftPad} à partir de './leftpad';
Les accolades sont obligatoires avec une exportation nommée et échoueront si elles ne sont pas utilisées.
Il est possible de changer le nom d'une exportation nommée à l'importation si nécessaire, et pour ce faire, nous devons modifier notre syntaxe un peu en utilisant une importation [module] comme syntaxe [path]
. Comme pour l'exportation
il existe plusieurs façons de procéder, qui sont toutes détaillées sur la page MDN import .
import {leftPad as pineapple_fritter} à partir de './leftpad_es6 ';
Encore une fois, le changement de nom est un peu absurde, mais il illustre le fait qu'ils peuvent être changés en n'importe quoi. Vous devriez toujours respecter les bonnes pratiques de nommage, à moins bien sûr d'écrire des routines pour préparer des recettes à base de fruits
Consommer le module exporté
Utiliser le module leftPad
exporté , J'ai créé le fichier index.js
dans le dossier src / js
. Ici, je parcours un tableau de numéros de série, et les préfixes avec des zéros pour les transformer en une chaîne de huit caractères. Plus tard, nous utiliserons ceci et les afficherons dans un élément de liste ordonnée sur une page HTML. Notez que cet exemple utilise la syntaxe d'exportation par défaut:
import leftPad from './leftpad';
ser seros = [6934, 23111, 23114, 1001, 211161];
const strSNos = serNos.map (sn => leftPad (sn, 8, '0'));
console.log (strSNos);
Comme précédemment, exécutez le script de construction à partir du répertoire
:
npm run build
Babel va maintenant créer un fichier index.js
dans le répertoire public / js
. Comme avec notre fichier leftPad.js
vous devriez voir que Babel a remplacé toute la syntaxe ES6 et n'a laissé que la syntaxe ES5. Vous pouvez également remarquer qu'il a converti la syntaxe du module ES6 au module module.exports
basé sur un nœud, ce qui signifie que nous pouvons l'exécuter à partir de la ligne de commande:
node public / js / index.js
// [ '00006934', '00023111', '00023114', '00001001', '00211161' ]
Votre terminal devrait maintenant se déconnecter d'un tableau de chaînes préfixé par des zéros pour les faire tous les huit caractères. Avec cela fait, il est temps de jeter un oeil à webpack
Introduire webpack et l'intégrer avec Babel
Comme mentionné, les modules ES6 permettent au développeur JavaScript de décomposer son code en morceaux gérables, mais la conséquence en est que ces morceaux doivent être servis au navigateur demandeur, ajoutant potentiellement des dizaines de demandes HTTP supplémentaires au serveur - quelque chose que nous devrions vraiment chercher à éviter. C'est là que webpack entre en jeu.
webpack est un bundler de module. Son objectif principal est de traiter votre application en recherchant toutes ses dépendances, puis de les regrouper en un ou plusieurs bundles pouvant être exécutés dans le navigateur. Cependant, cela peut être beaucoup plus que cela, en fonction de la façon dont il est configuré.
La configuration webpack est basée sur quatre composants clés:
- un point d'entrée
- un emplacement de sortie
- loaders
- plugins
] Entrée: Ceci contient le point de départ de votre application d'où webpack peut identifier ses dépendances.
Résultat: Ceci spécifie où vous voudriez que le paquet traité soit sauvé.
Loaders: Voici une façon de convertir une chose en entrée et de générer quelque chose d'autre en sortie. Ils peuvent être utilisés pour étendre les capacités de webpack pour gérer plus que des fichiers JavaScript, et donc les convertir en modules valides.
Plugins: Ils sont utilisés pour étendre les capacités de webpack à d'autres tâches. comme minification, linting et optimisation.
Pour installer webpack, exécutez ce qui suit à partir de votre répertoire
:
npm installez webpack webpack-cli --save-dev
Ceci installe localement webpack au projet, et donne également la possibilité d'exécuter webpack à partir de la ligne de commande en ajoutant webpack-cli
. Vous devriez maintenant voir le webpack listé dans votre fichier package.json
. Alors que vous êtes dans ce fichier, modifiez la section des scripts comme suit, de sorte qu'il sache maintenant utiliser webpack au lieu de Babel directement:
"scripts": {
"build": "webpack --config webpack.config.js"
},
Comme vous pouvez le voir, ce script appelle un fichier webpack.config.js
. Créons cela dans notre répertoire
avec le contenu suivant:
const path = require ( "chemin");
module.exports = {
mode: 'développement',
entrée: "./src/js/index.js",
sortie: {
chemin: path.resolve (__ dirname, "public"),
filename: "bundle.js"
}
}
C'est plus ou moins le fichier de configuration le plus simple dont vous avez besoin avec webpack. Vous pouvez voir qu'il utilise les sections entrée et sortie décrites précédemment (il pourrait fonctionner avec ces seules), mais contient également un mode : 'développement'
réglage
webpack a la possibilité d'utiliser les modes "développement" ou "production" . Réglage du mode : le 'développement'
optimise la vitesse de construction et le débogage, tandis que le mode : 'production'
optimise la vitesse d'exécution à l'exécution et la taille du fichier de sortie. Il y a une bonne explication des modes dans l'article de Tobias Koppers " webpack 4: mode et optimisation " si vous souhaitez en savoir plus sur comment ils peuvent être configurés au-delà des paramètres par défaut.
Ensuite, supprimez tous les fichiers à partir du dossier public / js
. Puis relancez ceci:
npm run build
Vous verrez qu'il contient maintenant un seul fichier ./ public / bundle.js
. Ouvrez le nouveau fichier, cependant, et les deux fichiers que nous avons commencés avec l'air plutôt différent. C'est la section du fichier qui contient le code index.js
. Même s'il est assez fortement modifié par rapport à notre original, vous pouvez toujours choisir ses noms de variables:
/ *** / "./src/js/index.js":
/ *! *************************! *
! *** ./src/js/index.js ***!
********************** /
/ *! pas d'exportations fournies * /
/ *** / (fonction (module, __webpack_exports__, __webpack_require__) {
"use strict";
eval ("__ webpack_require __. r (__ webpack_exports __); n / * harmonie import * / var _leftpad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require __ (/ *! ./leftpad * / " ./ src / js / leftpad.js "); n n nconst serNos = [6934, 23111, 23114, 1001, 211161]; nconst strSNos = serNos.map (sn => Objet (_leftpad__WEBPACK_IMPORTED_MODULE_0 __ ["default"]) (sn, 8, '0')); nconsole.log (strSNos); n n n // # sourceURL = webpack: ///./src/js/index.js? ");
/ *** /}),
Si vous exécutez node public / js / bundle.js
à partir du dossier
vous verrez que vous obtenez les mêmes résultats que précédemment.
Transpiling
Comme mentionné plus tôt, chargeurs nous permettent de convertir une chose en quelque chose d'autre. Dans ce cas, nous voulons que ES6 soit converti en ES5. Pour ce faire, nous aurons besoin de quelques paquets supplémentaires:
npm install babel-loader babel-core --save-dev
Pour les utiliser, le fichier webpack.config.js
a besoin d'une section de module qui l'ajoute après la section de sortie comme ceci:
module.exports = {
entrée: "./src/js/index.js",
sortie: {
chemin: path.resolve (__ dirname, "public / js"),
filename: "bundle.js"
},
module: {
règles: [
{
test: /.js$/,
exclude: /(node_modules)/,
use: {
loader: "babel-loader",
options: {
presets: ["babel-preset-env"]
}
}
}
]
}
}
Ceci utilise une instruction regex pour identifier les fichiers JavaScript à transplanter avec le babel-loader
tout en excluant tout élément du dossier node_modules
. Enfin, le babel-loader
doit utiliser le paquetage babel-preset-env
installé précédemment, pour établir les paramètres de transpile définis dans le fichier .babelrc
.
Cela fait, vous pouvez relancer ceci:
npm run build
Ensuite, vérifiez le nouveau public / js / bundle.js
et vous verrez que toutes les traces de la syntaxe ES6 ont disparu, mais elle produit toujours la même sortie que précédemment.
the Browser
Après avoir construit un webpack fonctionnel et une configuration Babel, il est temps d'apporter ce que nous avons fait au navigateur. Un petit fichier HTML est nécessaire et doit être créé dans le dossier
comme suit:
Webpack & Babel Demonstration
Liste des pièces
npm installez babel-cli babel-preset-env --save-dev
"devDependencies": {
"babel-cli": "^ 6.26.0",
"babel-preset-env": "^ 1.6.1"
}
"scripts": {
"build": "babel src -d public"
},
{
"préréglages": [
[
"env",
{
"targets": {
"browsers": ["last 2 versions", "safari >= 7"]
}
}
]
]
}
"use strict";
function leftPad (str, len, ch) {
const cache = [
"",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
];
str = str + "";
len = len - str.length;
if (len <= 0) renvoie str;
if (! ch && ch! == 0) ch = "";
ch = ch + "";
if (ch === "" && len < 10)
return () => {
cache [len] + str;
}
laissez pad = "";
while (true) {
si (len & 1) pad + = ch;
len >> = 1;
si (len) ch + = ch;
d'autre casse;
}
retourne `$ {pad} $ {str}`;
}
npm run build
"use strict";
function leftPad (str, len, ch) {
cache var = ["", " ", " ", " ", " ", " ", " ", " ", " ", " "];
str = str + "";
len = len - str.length;
if (len <= 0) renvoie str;
if (! ch && ch! == 0) ch = "";
ch = ch + "";
if (ch === "" && len < 10) return function () {
cache[len] + str;
};
var pad = "";
while (true) {
if (len & 1) pad += ch;
len >> = 1;
si (len) ch + = ch;
}
return "" + pad + str;
}
leftPad
en un module, que nous pouvons ensuite require dans un second fichier.
Exportation nommée
Pour créer une exportation nommée, ajoutez ce qui suit au bas du fichier leftPad
:
export {leftPad};
Nous pouvons également supprimer la déclaration "use strict";
du haut du fichier, car les modules s'exécutent en mode strict par défaut
Defult Export
Comme il n'y a qu'une seule fonction pour être exporté dans le fichier leftPad
il pourrait être un bon candidat pour utiliser export default
à la place:
exporter la fonction par défaut leftPad (str, len, ch) {
...
}
Encore une fois, vous pouvez supprimer la déclaration "use strict";
du haut du fichier.
Import
Pour utiliser les modules exportés, nous devons maintenant les importer dans le fichier. fichier (module) dans lequel nous souhaitons les utiliser. Pour l'option d'exportation par défaut
le module exporté peut être importé sous le nom de votre choix. Par exemple, le module leftPad
peut être importé comme suit:
import leftPad from './leftpad';
Ou il pourrait être importé comme un autre nom, comme ceci:
import pineapple_fritter de './leftpad';
Fonctionnellement, les deux fonctionneront exactement de la même manière, mais il est logique d'utiliser soit le même nom que celui exporté, soit quelque chose qui rend l'importation compréhensible - peut-être où le nom exporté se heurterait à un autre nom de variable existe dans le module de réception.
Pour l'option d'exportation nommée, nous devons importer le module en utilisant le même nom que celui dans lequel il a été exporté. Pour notre exemple de module, nous l'importons d'une manière similaire à celle que nous avons utilisée avec la syntaxe d'exportation par défaut
mais dans ce cas, nous devons envelopper le nom importé avec des accolades:
import { leftPad} à partir de './leftpad';
Les accolades sont obligatoires avec une exportation nommée et échoueront si elles ne sont pas utilisées.
Il est possible de changer le nom d'une exportation nommée à l'importation si nécessaire, et pour ce faire, nous devons modifier notre syntaxe un peu en utilisant une importation [module] comme syntaxe [path]
. Comme pour l'exportation
il existe plusieurs façons de procéder, qui sont toutes détaillées sur la page MDN import .
import {leftPad as pineapple_fritter} à partir de './leftpad_es6 ';
Encore une fois, le changement de nom est un peu absurde, mais il illustre le fait qu'ils peuvent être changés en n'importe quoi. Vous devriez toujours respecter les bonnes pratiques de nommage, à moins bien sûr d'écrire des routines pour préparer des recettes à base de fruits
Consommer le module exporté
Utiliser le module leftPad
exporté , J'ai créé le fichier index.js
dans le dossier src / js
. Ici, je parcours un tableau de numéros de série, et les préfixes avec des zéros pour les transformer en une chaîne de huit caractères. Plus tard, nous utiliserons ceci et les afficherons dans un élément de liste ordonnée sur une page HTML. Notez que cet exemple utilise la syntaxe d'exportation par défaut:
import leftPad from './leftpad';
ser seros = [6934, 23111, 23114, 1001, 211161];
const strSNos = serNos.map (sn => leftPad (sn, 8, '0'));
console.log (strSNos);
Comme précédemment, exécutez le script de construction à partir du répertoire
:
npm run build
Babel va maintenant créer un fichier index.js
dans le répertoire public / js
. Comme avec notre fichier leftPad.js
vous devriez voir que Babel a remplacé toute la syntaxe ES6 et n'a laissé que la syntaxe ES5. Vous pouvez également remarquer qu'il a converti la syntaxe du module ES6 au module module.exports
basé sur un nœud, ce qui signifie que nous pouvons l'exécuter à partir de la ligne de commande:
node public / js / index.js
// [ '00006934', '00023111', '00023114', '00001001', '00211161' ]
Votre terminal devrait maintenant se déconnecter d'un tableau de chaînes préfixé par des zéros pour les faire tous les huit caractères. Avec cela fait, il est temps de jeter un oeil à webpack
Introduire webpack et l'intégrer avec Babel
Comme mentionné, les modules ES6 permettent au développeur JavaScript de décomposer son code en morceaux gérables, mais la conséquence en est que ces morceaux doivent être servis au navigateur demandeur, ajoutant potentiellement des dizaines de demandes HTTP supplémentaires au serveur - quelque chose que nous devrions vraiment chercher à éviter. C'est là que webpack entre en jeu. webpack est un bundler de module. Son objectif principal est de traiter votre application en recherchant toutes ses dépendances, puis de les regrouper en un ou plusieurs bundles pouvant être exécutés dans le navigateur. Cependant, cela peut être beaucoup plus que cela, en fonction de la façon dont il est configuré. La configuration webpack est basée sur quatre composants clés:- un point d'entrée
- un emplacement de sortie
- loaders
- plugins
:
npm installez webpack webpack-cli --save-dev
Ceci installe localement webpack au projet, et donne également la possibilité d'exécuter webpack à partir de la ligne de commande en ajoutant webpack-cli
. Vous devriez maintenant voir le webpack listé dans votre fichier package.json
. Alors que vous êtes dans ce fichier, modifiez la section des scripts comme suit, de sorte qu'il sache maintenant utiliser webpack au lieu de Babel directement:
"scripts": {
"build": "webpack --config webpack.config.js"
},
Comme vous pouvez le voir, ce script appelle un fichier webpack.config.js
. Créons cela dans notre répertoire
avec le contenu suivant:
const path = require ( "chemin");
module.exports = {
mode: 'développement',
entrée: "./src/js/index.js",
sortie: {
chemin: path.resolve (__ dirname, "public"),
filename: "bundle.js"
}
}
C'est plus ou moins le fichier de configuration le plus simple dont vous avez besoin avec webpack. Vous pouvez voir qu'il utilise les sections entrée et sortie décrites précédemment (il pourrait fonctionner avec ces seules), mais contient également un mode : 'développement'
réglage
webpack a la possibilité d'utiliser les modes "développement" ou "production" . Réglage du mode : le 'développement'
optimise la vitesse de construction et le débogage, tandis que le mode : 'production'
optimise la vitesse d'exécution à l'exécution et la taille du fichier de sortie. Il y a une bonne explication des modes dans l'article de Tobias Koppers " webpack 4: mode et optimisation " si vous souhaitez en savoir plus sur comment ils peuvent être configurés au-delà des paramètres par défaut.
Ensuite, supprimez tous les fichiers à partir du dossier public / js
. Puis relancez ceci:
npm run build
Vous verrez qu'il contient maintenant un seul fichier ./ public / bundle.js
. Ouvrez le nouveau fichier, cependant, et les deux fichiers que nous avons commencés avec l'air plutôt différent. C'est la section du fichier qui contient le code index.js
. Même s'il est assez fortement modifié par rapport à notre original, vous pouvez toujours choisir ses noms de variables:
/ *** / "./src/js/index.js":
/ *! *************************! *
! *** ./src/js/index.js ***!
********************** /
/ *! pas d'exportations fournies * /
/ *** / (fonction (module, __webpack_exports__, __webpack_require__) {
"use strict";
eval ("__ webpack_require __. r (__ webpack_exports __); n / * harmonie import * / var _leftpad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require __ (/ *! ./leftpad * / " ./ src / js / leftpad.js "); n n nconst serNos = [6934, 23111, 23114, 1001, 211161]; nconst strSNos = serNos.map (sn => Objet (_leftpad__WEBPACK_IMPORTED_MODULE_0 __ ["default"]) (sn, 8, '0')); nconsole.log (strSNos); n n n // # sourceURL = webpack: ///./src/js/index.js? ");
/ *** /}),
Si vous exécutez node public / js / bundle.js
à partir du dossier
vous verrez que vous obtenez les mêmes résultats que précédemment.
Transpiling
Comme mentionné plus tôt, chargeurs nous permettent de convertir une chose en quelque chose d'autre. Dans ce cas, nous voulons que ES6 soit converti en ES5. Pour ce faire, nous aurons besoin de quelques paquets supplémentaires: npm install babel-loader babel-core --save-dev
Pour les utiliser, le fichier webpack.config.js
a besoin d'une section de module qui l'ajoute après la section de sortie comme ceci:
module.exports = {
entrée: "./src/js/index.js",
sortie: {
chemin: path.resolve (__ dirname, "public / js"),
filename: "bundle.js"
},
module: {
règles: [
{
test: /.js$/,
exclude: /(node_modules)/,
use: {
loader: "babel-loader",
options: {
presets: ["babel-preset-env"]
}
}
}
]
}
}
Ceci utilise une instruction regex pour identifier les fichiers JavaScript à transplanter avec le babel-loader
tout en excluant tout élément du dossier node_modules
. Enfin, le babel-loader
doit utiliser le paquetage babel-preset-env
installé précédemment, pour établir les paramètres de transpile définis dans le fichier .babelrc
.
Cela fait, vous pouvez relancer ceci:
npm run build
Ensuite, vérifiez le nouveau public / js / bundle.js
et vous verrez que toutes les traces de la syntaxe ES6 ont disparu, mais elle produit toujours la même sortie que précédemment.
the Browser
Après avoir construit un webpack fonctionnel et une configuration Babel, il est temps d'apporter ce que nous avons fait au navigateur. Un petit fichier HTML est nécessaire et doit être créé dans le dossier
comme suit:
Webpack & Babel Demonstration
Liste des pièces
Il n'y a rien de compliqué dedans. Les principaux points à noter sont l'élément
où le tableau de nombres va aller, et l'élément juste avant la balise fermante