0

我制作了这个“小部件”,客户可以在 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 包含这些垫片来覆盖我的客户?并确保它始终嵌入到现有网站中?它会导致一些膨胀,但在这种情况下,这并不是什么大不了的事,因为它是人们每月或每周使用一次的网站/服务。

4

1 回答 1

1

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

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

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

import 'core-js/shim';
于 2016-10-31T21:03:03.080 回答