2016-10-27 3 views
0

나는 클라이언트가 angular2에서 자신의 웹 사이트에로드 할 수있는 "위젯"을 만들었습니다. 예 :angular2/webpack에서 es6 브라우저 shim 적용

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

가 등 좀 더 설정되는 관련 아니지만, 값은 기본 요소에서 가져온되는 모든뿐만 아니라 고대의 브라우저에서 잘 작동하는 것 같다. 이 조각의

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 개 라인 (안 정말 : 그들과 같이이 있다면

그러나 하나의 클라이언트는 확인하지 않고 모든 공상 polyfills/심 (사용 마지막 하나도)

재미있는 부분은 내가 모두을 굴려야 만하는 RC5에서 작동했다는 것입니다. 만약 누군가가 내 클라이언트의 프로필을 덮어 쓰는 shim을 포함하도록 angular2/webpack을 강제 할 수 있는지 알고 있습니까? 기존 웹 사이트에 항상 삽입되어 작동하는지 확인하십시오. 약간 부 풀릴 수 있지만이 경우에는 웹 사이트/서비스 사용자가 한 달에 한 번 또는 일주일에 한 번 사용할 것이기 때문에 엄청난 거래가 아닙니다.

+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