11

我正在使用ChildNode.remove()并且我由 Mozilla 描述我需要一个用于 IE 的 polyfill。我正在使用配置了 babel-polyfill 的 webpack:

 "babel-polyfill": "^6.13.0",
 "webpack": "^2.4.1",

webpack.config.babel.js:

    entry: ['babel-polyfill', join(__dirname, path, "index.web.js") ],

我的假设是babel-polyfill会为我提供我需要的所有常见 polyfill - 但事实并非如此,我在Internet Explorer 11中有一个错误。我错过了另一个配置吗?

谢谢

4

3 回答 3

17

babel-polyfill据我所知,这些包只是填充 javascript 对象,Childnode.remove()是 DOM 的一部分,所以 babel 不会对它做任何事情。我建议您只使用Mozilla 文档中建议的 polyfill 。

// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md
(function (arr) {
  arr.forEach(function (item) {
    if (item.hasOwnProperty('remove')) {
      return;
    }
    Object.defineProperty(item, 'remove', {
      configurable: true,
      enumerable: true,
      writable: true,
      value: function remove() {
        this.parentNode.removeChild(this);
      }
    });
  });
})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
于 2017-05-03T09:44:00.653 回答
3

作为 babel-polyfill 的替代(或补充),您可以查看Polyfill.io

就像babel-polyfill,Polyfill.io 将提供核心的 Javascript 功能(例如Array.from),但与 babel-polyfill 不同的是,它还填充了 DOM 行为,(例如ChildNode.remove())。默认情况下,它使用浏览器用户代理字符串来确定哪些 polyfill 是必需的,从而防止现代浏览器需要下载他们不需要的 polyfill。

Polyfill.io 没有提供的主要babel-polyfill功能是支持生成器函数(由 regenerator-runtime 提供),因此对于完整功能,您需要包含它而不是整个babel-polyfill.

于 2017-09-25T18:59:48.510 回答
3

我创建了一个很小的 ​​polyfill npm。应该让你的生活更轻松。 https://www.npmjs.com/package/element-remove

于 2018-09-27T00:39:14.797 回答