2

私はrequire.jsを使用しています-requiredjsを使用すると、シムのエクスポートモジュールを使用せずにコンソールを使用している間、アンダースコアとバックボーンを取得できません。

しかし、jquery はこのエクスポート shim に依存することを求めていません。では、なぜ shim を使用する必要があり、それがアンダースコアとバックボーンのエクスポートなのですか?

ここに私のコードがあります:

requirejs.config({
    baseUrl: 'js',
    paths: {
        "jquery":'lib/jquery-1.9.1.min',
        "underscore":"lib/underscore-min",
        "backbone" : "lib/backbone-min"
    },
    shim:{
        "underscore":{
            exports: '_' 
                   //what is does here? without this i am getting undefined
        },
        "backbone":{
            exports: 'Backbone' 
                    //what is does here? without this i am getting undefined
        }
    }
});

    require(["jquery","underscore","backbone"],function ($,_,Backbone) {
        console.log($,_,Backbone);
//without shim export i am getting conosle like this:
// "function(), undefined, udefined" - why?
    });
4

1 に答える 1

4

Backboneまた、underscoreAMD に準拠していないため、グローバル スコープ (つまりwindow、ブラウザー環境の要素) に格納されます。要素を使用すると、グローバル変数 (アンダースコアの場合とバックボーンの場合) を「仮想」モジュールの「エクスポート」部分 (私は「仮想」と呼びました) にshim「リンク」することにより、AMD モジュールであるかのようにグローバル変数を公開できます。これはオンザフライで行われるため、コードを変更する必要はありません)。_Backbone

これ:

"underscore":{
    exports: '_' 
}

「アンダースコア」への依存関係を追加すると、参照が取得window._され、AMD モジュールとして公開されます。


jQueryAMDモジュールとしてロードされているかどうかを検出し、その場合はAMD準拠の方法で公開するため、必要ありません(詳細については、元のソースコードの一番下までスクロールしてください)

于 2013-05-06T15:21:14.907 に答える