2012-07-26 18 views
24

私はかなりの間、オプティマイザのドキュメントを読んでいますが、それはわかりません。 DOCは言う:requireJSオプティマイザにはネストされた要求コールが含まれていません

のみのアレイのトップレベルに渡される文字列リテラルの で指定されたモジュールを結合しますオプティマイザ必要と 呼び出しを定義する、または必要(「名前」)文字列リテラルの呼び出しで簡略化された CommonJSラッピング。したがって、 変数名でロードされるモジュールは見つかりません。

これまでのところOKです。これは、基本的には、r.jsにネストされた依存関係を含めたりクロールしたりしないことを意味します。

require([ 'es5shim', 'tools' ], function() { 
    console.log('fictive app entry point'); 

    require([ 'domready!' ], function(doc) { 
     console.log('domReady, loading GUI modules...'); 
     require([ 'GUI/window', 'GUI/header', 'GUI/content' ]); 
    }); 
}); 

私は問題がここでかなり明白になっ推測:今、私たちは次のようになり、「メインアプリケーション」ファイルを持っていると仮定することができます。 r.js(オプティマイザ)は、そのファイルをes5shim.jstools.jsにのみリンクすることで作成します。この例では、window.js,header.jscontent.jsファイルをリンクする必要があることをオプティマイザに伝える良い方法や回避策はありますか?

もちろんこの場合のdomReadyプラグインはロードされ、最終的にはコールバックが実行されますが、構造自体はオプティマイザがそのジョブを実行できないように見えます。

質問です

  • 私はちょうどですべてのモジュールをリストした場合は、「トップが呼び出す必要」r.jsも含まれるであろう+リンク入れ子になったから、すべてのトップrequiredefineコールと入れ子になったモジュールをmain-appファイルに追加しますか?

  • 彼らはr.jsドキュメントでためオプションを含め言及しています。ここで意味をなさないでしょう、もしそうなら、それを正しく呼び出す方法は?後でオンレイジーロード・モジュールにオプションを失いたくはありませんが、(DOMContentLoadedを待っている)依存関係のこの種のために、私はそれを回避する方法がある願っています。もちろん

+0

私は理解していません:どうしてネスティングが最初に必要ですか?なぜ単にGUI /ウィンドウをes5shimに依存させるのではなく、es5shimをdomreadyに依存させるのはなぜですか? ? – machineghost

答えて

44

デフォルトでは、RequireJSは実行時に依存関係をロードすることを前提としているため、ネストされた必須呼び出しをスキャンしません。これは、最適化設定で

findNestedDependencies: true 

と設定して無効にします。希望が役立ちます。

+0

非常に良い、ありがとう。 – Eric

+5

これは本当に知っておくと便利ですが、特にRequireJSの文書で見つけるのは簡単ではありません – hellosmithy

+0

ありがとう!これは私の問題を実質的に解決しました! –

関連する問題