2

こんばんは、

requireJsを初めて使用し、私の質問が愚かではないことを願っています。これが私の最初の質問です:)。

  1. なぜ男は上記のコードrequireとrequirejsで使用しているのですか、違いは何ですか?

        require(["config"]、function(config){
            requirejs.config(config);
            require(["App"、 "ember"]、function(App、Ember){
                var app_name = config.app_name || "アプリ";
                root [app_name] = App = Ember.Application.create(App);
                App.deferUntilDOMReady();
            });
        });
    1. 異なるコードスペルの間に違いはありますか?
    2. どちらの場合も、スクリプトリソースは非同期または同期でロードされますか?
    3. requirejsを使用する場合-jqueryはグローバルスコープ(amdスコープ)よりもjquery($)ですか?
        require(['script1'、'script2']、function(){}
        require(function(require){
          require('script1');
          require('script2');
    }
  2. 複数の必須構成を持つことは可能ですか?たとえば、/ modules / helper / example / js/exampleのようなネストされた構造がたくさんあります。現時点では、必要なシムはすべて揃っています。main.js構成内。main.jsまたはconfigを配置したい。

私がもはや必要としないよりも、メインの中にすべての構成、パスを配置します。

4

1 に答える 1

3

1.1 RequireJSは、それ自体の2つのインスタンスをグローバルスコープにrequire登録しますrequirejs。実際には、1つの理由で、スコープまたは実装が異なるrequire別のインスタンスでオーバーライドされた場合でも、通常は常にグローバルになります。この分離は、現在使用しているモジュールに関連するリソースを消費することを計画している場合に重要です。requirerequirejs

// contents of 'a/b/c.js' module file
define(['require'], function(require){

    // "local scope" require call
    // resolves to 'a/b/d.js' file
    require(['./d'], function(d){})

    // "global scope" require call
    // resolves to 'd.js' file
    requirejs(['./d'], function(d){})
})

ローカルrequireを要求することは、define呼び出しでのみ意味があることに注意してください。define呼び出しは「モジュール」とそのIDを確立するものです。上記は、この名前付き定義と同等です。

// contents of whatever file
define('a/b/c', ['require'], function(require){

    // "local scope" require call
    // resolves to 'a/b/d.js' file
    require(['./d'], function(d){})

    // "global scope" require call
    // resolves to 'd.js' file
    requirejs(['./d'], function(d){})
})

Jamesがそこに入れたもう1つの秘密の理由は、彼のビルドツールがrequire呼び出しを見つけるためにその特定の文字列を探すため、ローカルスコープでのrequirejs使用を強制するためです。これを行うと、予期したものではないため、突然依存関係ツリーをたどることができなくなります。requirerequirer.jsmyLocalRequirer.js

// contents of 'a/b/c.js' module file
define(['require'], function(myLocalRequire){

    // "local scope" require call
    // resolves to 'a/b/d.js' file
    myLocalRequire(['./d'], function(d){})

    // "global scope" require call
    // resolves to 'd.js' file
    require(['./d'], function(d){})
})

1.2RequireJSは同期読み込みをまったく行いません。「同期しなければならない!」と思う唯一の場所。--CommonJSスタイルの呼び出しはvar a = require('a')まだそうではないようです。リソースをキャッシュからヤンクします。つまり、同期をロードすることはありません。

1.3バンドルされているRequireJS+jQueryを使用しないでください。それはすでに巨大なjQueryをより巨大にし、ブラウザのキャッシュを妨害します。(CDNからキャッシュされたjQueryを使用する代わりに、ユーザーに同じjQueryを再度ダウンロードするように強制します-100kのゴミ箱)。

代わりにこれを参照してください:RequireJSでjQueryをロードせずに依存関係としてjQueryを使用しますか?

2.0しないでください。個別の構成はトラップです。アプリの「構築」を開始したら、喜んで入力するのは地獄です。名前付き定義グループまたはメインモジュールが相対リソースをロードする「パッケージ」のいずれかとして表現できない、別の正常な構成の例を1つ挙げてください。

RequireJS構成に含まれている必要があるのは、「baseUrl」と2〜5個のグローバルに使用される「パス」の定義だけです。それでおしまい。

于 2013-02-15T18:31:52.297 に答える