Polyfills in 2019 for IE11



这是2019年,当我们没有更好的时间要做时,我们希望支持IE11,我不得不承认我对所有可用的polyfills有点困惑。

  • babel-polyfill似乎推荐core-js
  • core-js
  • es5-shimes6-shim

据我了解,所有这些东西都应该启用更新版本的 Ecmascript,而不是修补其余的。我有几个自定义填充,例如支持自定义事件。

我不认为它会改变任何东西,但我正在使用:

  • 网络包 2.7.0
  • 通天塔 6.16

现在在我的主脚本的顶部,我有:

require('core-js');

但我仍然得到:

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

这似乎主要是一个不受支持的 Ecmascript 迭代功能。

关于在问题的宏观层面上做什么有什么建议吗?

编辑

Symbol.iterator实际上是由一个缺失的"为...的"波利菲尔。

编辑:解决方案

我的完整配置在此答案中可见 包括 Babel 7 中的node_modules目录

由于您使用 Babel 进行转译,因此您可以使用@babel/preset-env预设并将目标环境设置为 IE11*。

  1. 安装预设:yarn add @babel/preset-env --dev

  2. 在 Babel 配置中配置目标:

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

*来自文档

@babel/preset-env 获取您指定的任何目标环境,并根据其映射对其进行检查,以编译插件列表并将其传递给 Babel。

在官方文档中,它说"为了使用迭代器,你必须包含 Babel polyfill。 您可以尝试使用npm install --save @babel/polyfill安装它,并将其与应用程序入口点顶部的require("@babel/polyfill")一起使用。

提供 polyfill 是为了方便起见,但您应该将其与 @babel/preset-env 和 useBuiltIns 选项一起使用,这样它就不会包含并不总是需要的整个 polyfill。否则,我们建议您手动导入各个填充物。

您也可以尝试导入core-js/fn/symbol/iterator.js

最新更新