2016-09-23 1 views
0

Webpackを使用して依存関係をパッケージ化しています。メソッド結合をロードしようとしています。依存性は 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ファイルなどに含ま...このようになります。私が追加しようとすると...

require.bind(window); 

私は

重要な依存関係を取得:20:0-7は での方法で使用されている依存関係を静的に

を抽出することができない機能を必要とします

これを行う正しい方法は何ですか?

更新

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

私は

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

を行う場合には動作しているようですが、これはレガシーコードであるため、後のすべてのインスタンスを検索し始めることは本当に難しいです。

アップデート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'必要はありません'window'と等しくなる?その反対は真実であるはずです。 – 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 Updated answer。最後の2段落を参照してください。 – tcooc

+0

申し訳ありません私は窓にそれを必要としません_これは同じ方法で行われます。私もtypoを持っていた – Jackie

関連する問題