2016-10-27 15 views
0

私はこの「ウィジェット」を作成しました。クライアントはangular2でウェブサイトにロードできます。例えばangular2/webpackにes6ブラウザシムを適用する

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

いくつかのより多くの設定がありますなどそれは関係ありませんですが、値はネイティブの要素から引き出され、すべてが同様に古代のブラウザで正常に動作するようです。

しかし1つのクライアントは、彼らがそうのようにそこにいるかどうかをチェックせずに(これらすべてのファンシーpolyfills /シムを使用しています。

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行が(本当に最後の1つ)

私はロールバックしなければならなかったRC5で作業していたのですが、 に戻ってきました。私のクライアントのオーバーライドにそれらのシムを含めるようにangular2/webpackを強制することができますか?既存のウェブサイトに常に埋め込まれていることを確認しますか?これは少し鼓動しますが、この場合はそれはウェブサイト/サービスの人々が月に1回または週に1回使用するので、大きな問題ではありません。

+0

それは私のangular2ウィジェットと何この*競合の特に最後の4行は明らかではありませんこのスニペットは意味するはずです。エラーがあれば、投稿してください。 – estus

+0

私はそれを再構築できるかどうかを確認します。スタックオーバーフローが発生しました。その行に戻ります(a.applyを返します)。基本的には、Function.bindまたはFunction.applyの実装が間違っています。 しかし、私は匿名で綱引きをすることができるかどうかを確認します。 –

答えて

1

通常、この機能がすでに存在する場合、ポリフィル(特にcore-js)は適用されません。

問題はbindに絞り込むことができるならば、それはプロジェクトにpolyfillsを追加する前に削除することができます。

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

import 'core-js/shim'; 
+0

私はこれを試みます、私はそれが複数の機能だと信じています。しかし、いくつかのテストで私は適切な結果を得なければなりません。私はそれが8/9のpolyfillsのようにしかないと信じています –

+0

ねえ、私はそれを試して、これは実際に動作します。私は単純なタイプのアサーションをしなければなりませんでした。 –

+0

喜んでそれはあなたのために働く。 – estus

関連する問題