在 angular2 / webpack 中强制执行 es6 浏览器垫片

Enforce es6 Browser shims in angular2 / webpack

我做了这个 "widget" 客户可以在他们的网站上加载 angular2。例如

<some-name config="clientcode"></some-name>

还有一些其他设置等,但这无关紧要,值是从本机元素中提取的,所有这些似乎在旧版浏览器上也能正常工作。

然而,一位客户使用了所有这些花哨的东西 polyfills/shims(没有检查它们是否存在,就像这样:

Object.extend(Function.prototype, {
argumentNames: function() {
    var a = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1].replace(/\s+/g, "").split(",");
    return 1 != a.length || a[0] ? a : []
},
bind: function() {
    if (2 > arguments.length && Object.isUndefined(arguments[0]))
        return this;
    var a = this
      , b = $A(arguments)
      , c = b.shift();
    return function() {
        return a.apply(c, b.concat($A(arguments)))
    }
}, ... });

这些与我的 angular2 小部件冲突,尤其是此代码段的最后 4 行(虽然不是最后一行)。

有趣的部分是,我一直在 RC5 上工作,我不得不推出它 回到。有谁知道我是否可以强制 angular2/webpack 包含那些垫片来覆盖我客户的垫片?并确保它始终嵌入到现有网站中?它会导致有点膨胀,但在这种情况下这不是什么大问题,因为它是 website/service 人们会每月使用一次或可能每周使用一次。

如果该功能已经存在,通常不会应用 polyfill(特别是 core-js)。

如果问题可以缩小到 bind,可以在向项目添加 polyfill 之前将其删除:

if (Function.bind && !/\[native code\]/.test(Function.bind)) {
  delete Function.prototype.bind;
}

import 'core-js/shim';