5

少し怠惰になって自分ですべてを試していないことをお詫びしますが、Stackoverflowでの良い答えは他の人にも役立つかもしれないと思いました。requireJSモジュールのロードに使用するかどうかを考えています。現在、私は自分でそれを行っているので、requireJSについていくつか質問があります。

  • requireJSは複数の参照をどのように処理しますか(ファイル/モジュールをキャッシュしますか)?

より正確には、のような呼び出しがrequire(["some/module", "a.js", "b.js"], function...});あり、再度参照しa.jsたりb.js、後で参照し.requireたり、.define呼び出しを行ったりした場合、 requireJSはそれらをどのように処理しますか?私の推測では、それはそれらの追加の参照を完全に無視します、それは正しいですか?もしそうなら、requireJSにスクリプトをリロードさせることは可能ですか?

  • requireJSは常にファイルをネットワーク経由で転送しますか、それともモジュールを静的にロードできますか?

私が通常行うことは、実行時の条件に応じてロードする必要があるファイルを除いて、すべてのjsファイル(モジュールを含む)を連結することです。requireJSのドキュメントを読んでいる限り、モジュールに独自の名前を定義できます。だから私の質問は、ネットワークを介して転送せずに、スクリプトにすでに存在するモジュールをロードできますか? 私がドキュメントを理解している限り、名前はパスの場所とファイル名に基づいてモジュールに自動的に作成されるため、ここでの私の要件には意味がありません。

4

2 に答える 2

5

requirejs.undef()トリックを行う必要があります

于 2013-06-26T21:20:11.410 に答える
3

通常、モジュールはrequire.jsによって1回だけロードされます。require.jsは常に依存関係を解決し、モジュールを正しい順序でロードするため、それを気にする必要はありません。同じモジュールに対する後続の呼び出しはrequire、すぐにそれを生成します。

モジュールをリロードすることはできません。同じモジュールを複数回ロードする必要がある場合(残念ながら、モジュールの設計に問題があることを示します)、マルチバージョンのサポートを確認できます。

「モジュールを静的にロードする」とはどういう意味かわかりません。しかし、私が正しく推測している場合は、複数のモジュールを1つとしてロードし、それらを別々に使用する必要があります。これは可能です。通常、モジュールでは次のようなことを行います。

define(['moduleA', 'moduleB', 'moduleC'], function (a, b, c) {
    ...
    return exports;
});

ここでexportsは、多かれ少なかれ、関数、オブジェクトなど、何でもかまいません。したがって、次のようなこともできます。

define(['moduleA', 'moduleB', 'moduleC'], function (a, b, c) {
    ...
    return {moduleA: a, moduleB: b, moduleC: c};
});

それらをすべて一緒にエクスポートします。

ただし、実際には最適化ツールを確認する必要があることに注意してください。関連するモジュールをグループ化できます。

最後に、自動命名は誤解です。モジュールの名前を明示することができます。

于 2012-04-17T17:20:27.007 に答える