1

私は次のものを持っています。

require([ 'a', 'b' ], function() {     
   if(x){
       require([ 'c', 'd' ], function( ) {});
   }   
});

c常にロードされdます。オプティマイザcを最適化しd、1 つのファイルとしてロードする方法はありますか?

編集:

また、オプティマイザとしてr.jsを使用しています。私のビルド スクリプトのモジュールは次のようになります。

modules: [
    {
        name: "main",
    },
    {
        name: "c",
            include: ["d"]
    }
] 

これは に含まdれますが、とcの両方が実行時に読み込まれます。cd

4

2 に答える 2

2

r.js(「オプティマイザー」とはそういう意味だとc思いdます) 明示的に要求しない限り、[ 「 includeオプションを使用することで、オプティマイザーの静的分析で見つからないモジュールをいつでも明示的に追加できます。」- RequireJS ドキュメントから]。これを行うと、それらは最適化された出力になり、実行時にコードの残りの部分と一緒にロードされます (aブロックに到達しない場合でも)。bxfalserequire

そうしないと、r.jsはそのブロックをスキップし、最適化や連結を行うには遅すぎる実行時 ( の場合)にRequireJSのみ解決cします。dxtrue

RE: 編集

cインクルードとdインを強制する正しい方法は次のmainとおりです。

    modules: [ {
        name: "main",
        include: ["c", "d"]
    } ] 

これは、「明示的に必要なすべてを含めるmain.jsだけでなく、追加c.jsしてd.js

RE: コメント:

ああ、そうです、構成c.jsは両方を含むc最適化されたものも作成しますdが、とにかくRequireJS「スタンドアロン」をロードします。d奇妙なことにd、最適化されたファイルの を引き続き使用し、スタンドアロンを評価することさえしません(最適化されたおよびd.jsの内容を編集することによって確認されます)。RequireJS は、ロードが依存関係を満たすことを知る方法がないため、リストされているすべての依存関係をすぐに要求すると思います(これは、モジュールがロードされて処理された後にのみ認識されます)。他の唯一のオプションは、ファイルを 1 つずつ順番に要求することであるため、これは理にかなっています。これはボトルネックになります。c.jsd.jscd

于 2013-02-09T13:52:57.880 に答える
1

ここで答えを得た

本番環境でパス マッピングを設定して、 にdあるRequireJS に通知することができcます。

単に行う:

paths: {
  'd': 'c'
}
于 2013-02-11T20:08:53.977 に答える