2016-09-23 3 views
0

Webpack을 사용하여 종속성을 패키징하고 있습니다. method-combintator를로드하려고합니다. 종속성은 commonJS 모듈에서 .call (this)을 사용할 때이 창을 만드는 방법

require("method-combinators/lib/method-combinators.js"); 

나는 내부 기능에 브레이크 포인트

내가 this != window을 알 ...
// Generated by CoffeeScript 1.3.1 
(function() { 
    var __slice = [].slice; 

    this.before = function(decoration) { 
    return function(base) { 
     return function() { 
     decoration.apply(this, arguments); 
     return base.apply(this, arguments); 
     }; 
    }; 
    }; 
    ... 
}).call(this); 

가 그럼 난 내 TS 파일과 같은에 포함 ... 다음과 같습니다. 20 : 내가 추가하려고하면 ...

require.bind(window); 

나는

중요한 종속성을 얻을 0-7 정적

을 추출 할 수없는 종속 관계있는 의 방법으로 사용되는 함수가 필요

이 작업을 수행하는 올바른 방법은 무엇입니까? 내가

window['comb'] = require("method-combinators/lib/method-combinators.js"); 

을 할 경우

업데이트

> this 
Object {} 
> window 
Window {...} 

작동하는 것 같다, 그러나 이것은 레거시 코드가 있기 때문에 후와 시작의 모든 인스턴스를 검색하는 정말 어렵습니다.

업데이트 2

이 좀 작동 ... @tcooc에서 제공하는 대답과 비슷하지만 문제는 내가 각 기능을 나열 할 필요가있다

var comb = require("method-combinators/lib/method-combinators.js"); 
window['after'] = comb.after; 
window['before'] = comb.before; 

. 밑줄을 위해 나는 이런 식으로 뭔가 ...

var s = require("underscore.string"); 
window['_'].mixin(s.exports()); 

이 그러나 여기에서 문제는 빗이 내 마지막

var comb = require("method-combinators/lib/method-combinators.js"); 
window['_'].extend(window, comb); 
+0

이유는 무엇입니까 'this' 필요 '창'과 동일합니까? 그 반대가 사실이어야합니다. – tcooc

+0

창에 추가해야합니다. 그렇지 않으면 함수()()와 같이 호출 할 수 없습니다. var.after.function처럼 호출해야합니다. – Jackie

+1

JavaScript, CoffeeScript * 및 * TypeScript를 혼합하고 있습니까? 당신은 용감한 사람입니다 :). –

답변

1

했다 exports

업데이트 3

이없는 것입니다 commonjs 모듈은 의도적으로 전역 범위에 액세스하거나 수정하지 마십시오 (적어도 그렇게해서는 안됩니다). 코드의 this 변수가 window이 아닌 해당 모듈에서 내 보낸 값을 참조합니다. 코드가 실제로 (사용 사례에 대한 간체) 같은에 싸여 :

// you want to load "method-combinator.js" 
require('method-combinator.js'); 
// load "method-combinator.js" as "dependency()" 
var exports = {}; 
dependency.call(exports); 

을 이제 "방법-combinator.js"를로드하려고 할 때마다, exports이 반환됩니다.

종속성을 사용하는 올바른 방법은 다음과 같습니다

var combinators = require('method-combinator.js'); 

당신은 밑줄이 가정의 windowcombinators의 모든 값을 추가 할 경우

_.extend(window, combinators); 
// or if _ is somehow not resolving properly (for some reason?) 
window._.extend(window, combinators); 
+0

업데이트 2가 추가되었습니다. – Jackie

+0

@Jackie 업데이트 답변. 마지막 두 단락을 참조하십시오. – tcooc

+0

죄송합니다. 창에서 필요 없습니다. _ 동일한 방법으로 처리됩니다. 나도 오타가 있었어 – Jackie

관련 문제