Mises en garde
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 →
Polyfills
Pour que certaines fonctionnalités fonctionnent, elles nécessitent des polyfills spécifiques. Vous pouvez satisfaire toutes
les exigences de Babel en utilisant un polyfill complet comme core-js/actual ou (pour un chargement via <script>) core-js-bundle.
Vous pouvez également inclure sélectivement ce dont vous avez besoin :
| Feature | Requirements |
|---|---|
| Array destructuring, For Of | Symbol, prototype[Symbol.iterator] |
| Spread | Array.from |
Si vous compilez des générateurs ou fonctions asynchrones vers ES5 avec une version de @babel/core ou @babel/plugin-transform-regenerator antérieure à 7.18.0, vous devez aussi charger le package regenerator runtime. Ce chargement est automatique avec l'option useBuiltIns: "usage" de @babel/preset-env ou via @babel/plugin-transform-runtime.
Fonctions natives
Babel suppose que les fonctions natives (ex: Array, WeakMap), si polyfillées, sont modifiées de manière conforme aux spécifications.
Classes
Les classes natives comme Date, Array, DOM etc. ne peuvent pas être correctement sous-classées
en raison des limitations d'ES5 (pour le plugin transform-classes).
Vous pouvez essayer babel-plugin-transform-builtin-extend basé sur Object.setPrototypeOf et Reflect.construct, mais il présente aussi des limitations.
ES5
Babel suppose que votre code s'exécutera dans un environnement ES5 et utilise donc ses fonctions. Dans un environnement avec un support limité ou nul d'ES5 (ex: anciennes versions d'IE), utiliser @babel/polyfill ajoutera le support nécessaire.
Internet Explorer
Classes (versions 10 et inférieures)
Lors d'un héritage de classe, les propriétés statiques sont héritées via __proto__, supporté largement mais problématique sur les navigateurs très anciens.
NOTE : __proto__ n'est pas supporté sur IE ≤ 10 donc les propriétés statiques
ne seront pas héritées. Consultez protoToAssign pour une solution possible.
Pour les classes avec super, la super-classe ne sera pas résolue correctement.
Activez l'option loose du plugin transform-classes pour contourner ce problème.
Getters/setters (versions 8 et inférieures)
Sous IE8, Object.defineProperty ne fonctionne que sur les objets DOM. Cela empêche
de définir correctement les getters/setters. Si vous ciblez IE8 ou inférieur,
évitez d'utiliser les getters/setters.
Référence : MDN.
Modules
Par défaut, avec les modules Babel exporte une propriété non-énumérable __esModule
via Object.defineProperty, non supporté sous IE8 et inférieur. Pour contourner ceci,
activez l'option loose dans votre plugin de modules correspondant.