Babel 7 不会在 IE11 中填充 Promise、Fetch 和一些 JavaScript 文件(比如在供应商文件中)

Babel 7 does not polyfill Promise, Fetch and some JavaScript files (like in a vendor file) in IE11

我升级到 Babel 7. It works fine in evergreen browsers like Opera 和 Chrome。但是在 IE11 中,Promise 和 Fetch API 没有在 JavaScript 中填充。当我手动填充它们时,我会看到一个奇怪的问题,即 vendorXYZ.js 文件仍然有 ES6 代码(SCRIPT 错误)。我该如何解决这个问题?

Babel 7 有一个问题,它不填充 Promise 和 Fetch API。这在常青浏览器中不是问题,因为它们本身就支持这些。但这在缺乏原生支持的 IE11 中是一个巨大的问题。我找不到让 Babel polyfill 它们的方法。解决方法是自己填充它们。我使用 bluebird to polyfill Promise, and whatwg-fetch 来 polyfill fetch。

我相信很快就会出现一种趋势,即 npm 包发布者将不再费心在 ES5 中提供其代码的内置版本。无论如何,在 node_modules 中没有 Babel 转译包是很常见的。因此,您可能有一个用 ES6 编写的 JavaScript 文件但被传递给 IE11,这会导致问题。我建议浏览一下供应商文件或 webpack 输出到的任何文件,并尝试查看您是否已经弄清楚哪个包具有 ES6+ 代码。我个人遇到了 query-string 版本 6 的问题。解决方法是使用 ES5 降级到不同的版本,或者使用 babel-loader 转换代码。