Aller au contenu principal

Mises en garde

Traduction Bêta Non Officielle

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 :

FeatureRequirements
Array destructuring, For OfSymbol, prototype[Symbol.iterator]
SpreadArray.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.