Guide d'utilisation
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
La chaîne d'outils Babel propose plusieurs outils pour faciliter son utilisation, que vous soyez un « utilisateur final » ou que vous développiez une intégration de Babel lui-même. Ceci est une introduction rapide à ces outils, et vous pourrez en apprendre davantage dans la section « Utilisation » de la documentation.
Si vous utilisez un framework, la configuration de Babel peut différer ou être déjà prise en charge. Consultez plutôt notre guide de configuration interactive.
Vue d'ensemble
Ce guide vous montrera comment compiler votre code d'application JavaScript utilisant la syntaxe ES2015+ en un code fonctionnel dans les navigateurs actuels. Cela impliquera à la fois la transformation de la nouvelle syntaxe et le polyfill des fonctionnalités manquantes.
Le processus complet pour mettre cela en place implique :
-
Exécutez ces commandes pour installer les paquets :
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/core @babel/cli @babel/preset-envyarn add --dev @babel/core @babel/cli @babel/preset-envpnpm add --save-dev @babel/core @babel/cli @babel/preset-envbun add --dev @babel/core @babel/cli @babel/preset-env -
Créez un fichier de configuration nommé
babel.config.json(nécessitev7.8.0ou supérieur) à la racine de votre projet avec ce contenu :babel.config.json{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"edge": "17",
"firefox": "60",
"chrome": "67",
"safari": "11.1"
},
"useBuiltIns": "usage",
"corejs": "3.6.5"
}
]
]
}La liste des navigateurs ci-dessus n'est qu'un exemple arbitraire. Vous devrez l'adapter aux navigateurs que vous souhaitez prendre en charge. Consultez ici pour plus d'options de
@babel/preset-env.
Ou babel.config.js si vous utilisez une version antérieure de Babel
const presets = [
[
"@babel/preset-env",
{
targets: {
edge: "17",
firefox: "60",
chrome: "67",
safari: "11.1",
},
useBuiltIns: "usage",
corejs: "3.6.4",
},
],
];
module.exports = { presets };
-
Exécutez cette commande pour compiler tout votre code du répertoire
srcverslib:Shell./node_modules/.bin/babel src --out-dir libVous pouvez utiliser le lanceur de paquets npm fourni avec npm@5.2.0 pour raccourcir cette commande en remplaçant
./node_modules/.bin/babelparnpx babel
Poursuivez pour une explication étape par étape de son fonctionnement et une présentation de chacun des outils utilisés.
Utilisation de base avec l'interface CLI
Tous les modules Babel dont vous aurez besoin sont publiés en tant que paquets npm distincts sous la portée @babel (depuis la version 7). Cette conception modulaire permet d'avoir divers outils, chacun conçu pour un cas d'utilisation spécifique. Ici, nous examinerons @babel/core et @babel/cli.
Bibliothèque principale
La fonctionnalité principale de Babel réside dans le module @babel/core. Après l'avoir installé :
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/core
yarn add --dev @babel/core
pnpm add --save-dev @babel/core
bun add --dev @babel/core
vous pouvez le require directement dans votre programme JavaScript et l'utiliser comme ceci :
const babel = require("@babel/core");
babel.transformSync("code", optionsObject);
En tant qu'utilisateur final, vous voudrez probablement installer d'autres outils qui servent d'interface à @babel/core et s'intègrent bien à votre processus de développement. Malgré cela, vous pourriez consulter sa page de documentation pour découvrir les options, dont la plupart peuvent également être définies depuis les autres outils.
Outil CLI
@babel/cli est un outil qui vous permet d'utiliser Babel depuis le terminal. Voici la commande d'installation et un exemple d'utilisation de base :
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/core @babel/cli
./node_modules/.bin/babel src --out-dir lib
yarn add --dev @babel/core @babel/cli
./node_modules/.bin/babel src --out-dir lib
pnpm add --save-dev @babel/core @babel/cli
./node_modules/.bin/babel src --out-dir lib
bun add --dev @babel/core @babel/cli
./node_modules/.bin/babel src --out-dir lib
Cela analysera tous les fichiers JavaScript du répertoire src, appliquera les transformations que nous lui avons indiquées, et écrira chaque fichier dans le répertoire lib. Comme nous ne lui avons encore indiqué aucune transformation, le code en sortie sera identique à l'entrée (la mise en forme exacte du code n'est pas préservée). Nous pouvons spécifier les transformations souhaitées en les passant en tant qu'options.
Nous avons utilisé l'option --out-dir ci-dessus. Vous pouvez consulter les autres options acceptées par l'outil CLI en l'exécutant avec --help. Les plus importantes pour nous actuellement sont --plugins et --presets.
Plugins et presets
Les transformations s'effectuent via des plugins, de petits programmes JavaScript qui indiquent à Babel comment transformer le code. Vous pouvez même écrire vos propres plugins pour appliquer les transformations souhaitées. Pour convertir la syntaxe ES2015+ en ES5, nous pouvons utiliser des plugins officiels comme @babel/plugin-transform-arrow-functions :
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/plugin-transform-arrow-functions
./node_modules/.bin/babel src --out-dir lib --plugins=@babel/plugin-transform-arrow-functions
yarn add --dev @babel/plugin-transform-arrow-functions
./node_modules/.bin/babel src --out-dir lib --plugins=@babel/plugin-transform-arrow-functions
pnpm add --save-dev @babel/plugin-transform-arrow-functions
./node_modules/.bin/babel src --out-dir lib --plugins=@babel/plugin-transform-arrow-functions
bun add --dev @babel/plugin-transform-arrow-functions
./node_modules/.bin/babel src --out-dir lib --plugins=@babel/plugin-transform-arrow-functions
Désormais, toutes les fonctions fléchées de notre code seront transformées en expressions de fonction compatibles ES5 :
const fn = () => 1;
// converted to
var fn = function fn() {
return 1;
};
C'est un bon début ! Mais notre code contient d'autres fonctionnalités ES2015+ à transformer. Plutôt que d'ajouter les plugins un par un, nous pouvons utiliser un "preset" : un ensemble prédéfini de plugins.
Comme pour les plugins, vous pouvez créer vos propres presets pour partager des combinaisons spécifiques. Pour notre cas d'usage, le preset env est idéal.
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/preset-env
./node_modules/.bin/babel src --out-dir lib --presets=@babel/env
yarn add --dev @babel/preset-env
./node_modules/.bin/babel src --out-dir lib --presets=@babel/env
pnpm add --save-dev @babel/preset-env
./node_modules/.bin/babel src --out-dir lib --presets=@babel/env
bun add --dev @babel/preset-env
./node_modules/.bin/babel src --out-dir lib --presets=@babel/env
Sans configuration, ce preset inclut tous les plugins supportant le JavaScript moderne (ES2015, ES2016, etc.). Les presets acceptent également des options. Plutôt que de les passer via le terminal, voyons une autre méthode : les fichiers de configuration.
Configuration
Il existe plusieurs méthodes pour utiliser des fichiers de configuration selon vos besoins. Consultez notre guide détaillé sur la configuration de Babel pour plus d'informations.
Pour l'instant, créons un fichier babel.config.json (nécessite v7.8.0 ou ultérieur) avec ce contenu :
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"edge": "17",
"firefox": "60",
"chrome": "67",
"safari": "11.1"
}
}
]
]
}
Le preset env ne chargera désormais que les plugins de transformation pour les fonctionnalités absentes de nos navigateurs cibles. La syntaxe est gérée. Passons aux polyfills.
Polyfill
🚨 As de Babel 7.4.0, ce package est déprécié au profit de l'import direct de
core-js/stable(pour polyfill les fonctionnalités ECMAScript) :JavaScriptimport "core-js/stable";Si vous compilez des générateurs ou fonctions asynchrones en ES5 avec une version de
@babel/coreou@babel/plugin-transform-regeneratorantérieure à7.18.0, vous devez aussi charger le packageregenerator runtime. Il est chargé automatiquement avec l'optionuseBuiltIns: "usage"de@babel/preset-envou@babel/plugin-transform-runtime.
Le module @babel/polyfill inclut core-js et un regenerator runtime personnalisé pour émuler un environnement ES2015+ complet.
Vous pouvez ainsi utiliser de nouveaux éléments natifs comme Promise ou WeakMap, des méthodes statiques (Array.from, Object.assign), des méthodes d'instance (Array.prototype.includes), et des fonctions génératrices (avec le plugin regenerator). Le polyfill modifie le scope global et les prototypes natifs (comme String) pour cela.
Pour les auteurs de bibliothèques/outils, cette approche peut être excessive. Si vous n'avez pas besoin des méthodes d'instance comme Array.prototype.includes, évitez de polluer le scope global en utilisant le plugin transform runtime plutôt que @babel/polyfill.
Pour un contrôle précis, importez directement les polyfills nécessaires depuis core-js.
Comme nous construisons une application, installons simplement @babel/polyfill :
- npm
- Yarn
- pnpm
- Bun
npm install --save @babel/polyfill
yarn add @babel/polyfill
pnpm add @babel/polyfill
bun add @babel/polyfill
Notez l'option
--saveau lieu de--save-devcar il s'agit d'un polyfill qui doit s'exécuter avant votre code source.
Heureusement, nous utilisons le preset env qui propose une option "useBuiltIns". Lorsqu'elle est définie sur "usage", elle applique l'optimisation mentionnée précédemment en n'incluant que les polyfills strictement nécessaires. Avec cette option, la configuration devient :
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"edge": "17",
"firefox": "60",
"chrome": "67",
"safari": "11.1"
},
"useBuiltIns": "usage"
}
]
]
}
Babel va désormais analyser votre code pour identifier les fonctionnalités absentes de vos environnements cibles, et n'inclura que les polyfills requis. Par exemple ce code :
Promise.resolve().finally();
serait transformé ainsi (car Edge 17 ne supporte pas Promise.prototype.finally) :
require("core-js/modules/es.promise.finally");
Promise.resolve().finally();
Si nous n'utilisions pas le preset env avec l'option "useBuiltIns" définie sur "usage" (valeur par défaut "false"), nous aurions dû inclure le polyfill complet une seule fois dans notre point d'entrée avant tout autre code.
Par exemple :
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"edge": "17",
"firefox": "60",
"chrome": "67",
"safari": "11.1"
},
"useBuiltIns": "entry"
}
]
]
}
Then import core-js (to polyfill ECMAScript features) first, in our entry file to emulate a full ES2015+ environment since @babel/polyfill has been deprecated:
import "core-js/stable";
Résumé
Nous avons utilisé @babel/cli pour exécuter Babel en ligne de commande, @babel/polyfill pour fournir les nouvelles fonctionnalités JavaScript, et le preset env pour n'inclure que les transformations et polyfills correspondant aux fonctionnalités utilisées et absentes de nos navigateurs cibles.
Pour plus d'informations sur la configuration de Babel avec votre système de build, votre IDE et autres outils, consultez notre guide de configuration interactive.