0

いくつかの共有機能を実装するために、ブラウザーとサーバーの両方に requireJS モジュールをロードしています。

ただし、モジュールには各環境で異なる依存関係があります。

  • ノードでは、ファイルをロードできるようにするために fs モジュールが必要です
  • ブラウザーでは、これらのファイルを HTTP リソースとして取得できるようにするには、JQuery AJAX またはその他の AJAX ライブラリーが必要です。

ブラウザとサーバー間で共有されているが、それぞれに異なる依存関係を持つモジュールを処理できるようにするための最良の方法は何ですか?

4

1 に答える 1

1

依存関係は異なる必要はありません。代わりに、モジュールに依存関係としてどちらのモジュールも持たないようにします。むしろ、2つの異なるケースについてモジュールをパラメーター化し、それらのケースを処理するためにサーバーおよびブラウザー固有のコードから正しいパラメーターを渡す必要があります。1つの方法は、メソッドが呼び出される前にモジュールに特定のプロパティを設定することを要求し、このプロパティを必要なファイル読み込み機能を提供するオブジェクトに設定することです。

mymodule.fileLoader = fswrapper;

また

mymodule.fileLoader = ajaxWrapper;

(明らかに、上記の2つのフラグメントは、サーバー固有のコードとブラウザー固有のコードにそれぞれ表示されます)。もう1つの方法は、関連するオブジェクトをモジュールからエクスポートされたクラスのコンストラクターに渡すか(モジュールが公開される方法である場合)、作成されたオブジェクトのプロパティとして割り当てることです。例えば

var v = new MyClass(fswrapper);
//or
var v = new MyClass();
v.fileLoader = ajaxWrapper;

これらのアイデアにはさまざまなバリエーションがありますが、重要なのは、共有モジュールからファイルシステムの違いを抽象化し、代わりに問題の環境へのアクセスを処理するオブジェクトを渡す必要があるということです。

于 2012-05-27T14:14:34.953 に答える