web-dev-qa-db-fra.com

Polyfills en 2019 pour IE11

Nous sommes en 2019, nous aimerions soutenir IE11 lorsque nous n'avons rien de mieux à faire de notre temps et je dois admettre que je suis un peu confus à propos de tous les polyfills disponibles.

  • babel-polyfill semble recommander core-js
  • core-js
  • es5-shim et es6-shim

Pour autant que je sache, toutes ces choses sont censées permettre une version plus récente d'Ecmascript mais pas pour corriger le reste. J'ai quelques polyfills personnalisés, par exemple pour prendre en charge CustomEvent.

Je ne pense pas que cela change quoi que ce soit, mais j'utilise:

  • webpack 2.7.0
  • babel 6.16

En ce moment, en haut de mon script principal, j'ai:

require('core-js');

Mais je reçois toujours:

Object doesn't support property of method 'Symbol(Symbol.iterator)_a.Kr7pt1C'

Ce qui semble être principalement une fonction d'itération Ecmascript non prise en charge.

Des conseils sur quoi faire au niveau macro du problème?

ÉDITER

Le Symbol.iterator est en fait par un polyfill "for ... of" manquant.

EDIT: SOLUTION

Ma configuration complète est visible dans cette réponse Inclure le répertoire node_modules dans Babel 7

8
AsTeR

Puisque vous utilisez Babel pour la transpilation, vous pouvez utiliser le @babel/preset-env prédéfinissez et définissez votre environnement cible sur IE11 *.

  1. Installez le préréglage: yarn add @babel/preset-env --dev

  2. Configurez vos cibles dans votre configuration Babel:

{
  "presets": [
    ["@babel/presets-env", {
      "targets": {
        "browsers": {
          "ie": "11"
        }
      },
    }]
  ]
}

* De les docs

@ babel/preset-env prend tous les environnements cibles que vous avez spécifiés et les compare à ses mappages pour compiler une liste de plugins et la transmettre à Babel.

4
Jake

Dans le documentation officielle , il est dit "Pour utiliser les itérateurs, vous devez inclure le Babel polyfill ." Vous pouvez essayer de l'installer avec npm install --save @babel/polyfill Et l'utiliser avec require("@babel/polyfill") en haut du point d'entrée de votre application.

Le polyfill est fourni par commodité mais vous devez l'utiliser avec @ babel/preset-env et option useBuiltIns afin qu'il n'inclue pas le polyfill entier qui n'est pas ' t toujours nécessaire. Sinon, nous vous recommandons d'importer manuellement les polyfills individuels.

Vous pouvez également essayer d'importer core-js/fn/symbol/iterator.js.

1
Yu Zhou