这是2019年,当我们没有更好的时间要做时,我们希望支持IE11,我不得不承认我对所有可用的polyfills有点困惑。
babel-polyfill
似乎推荐core-js
core-js
es5-shim
和es6-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*。
-
安装预设:
yarn add @babel/preset-env --dev
-
在 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
。