2011-12-22 8 views
1

私はこのようなrequire.jsunderscore.jsをロードしようとしている:require.js:別の名前で名前を定義するモジュールをロードするにはどうすればよいですか?

require(["libs/underscore-1.2.3.js"], function(_) { 
    ... 
}); 

しかしunderscore.jsモジュール名エクスポートするので、これは動作しません:define('underscore', function() { ... })を。

lib/underscore-1.2.3.jsの名前を変更せずに、どうすればrequire.jsをロードできますか?

答えて

2

さてさて、いくつかのより多くのグーグルの後、私が見つけた:すべてのAMDローダー@dvdotsenko

は部分パスにモジュールIDをマッピングすることを可能 https://github.com/documentcloud/underscore/pull/338#issuecomment-3245213

は、通常の構成は、「パスと呼ばれています」、あなたがやりたい:

 
    requirejs.config({ 
     paths: 
      underscore: 'js/libs/underscore-1.2.3.min' 
     } 
    }); 
    require(['underscore'], function() {}); 

をアンダースコアが他のより高いレベルのモジュールで使用されているので、背骨のように、一般的な依存関係の名前は、共通dependenを通信するために使用する必要がありますcyはアンダースコアであり、その依存関係を「アンダースコア」と呼ぶのが理にかなっています。パス設定は、その依存関係に使用する特定のURLへのマッピングを行う方法を提供します。

これは答え私の質問に(つまり、私はまだ私がロードについては行くだろうかわからない私が持っていたすべてのURLだった場合アンダースコア)しませんが、少なくともそれは機能的な回避策です。

2

これは私にとって最も理想的な解決策ではありませんが、外部ファイルを要求し、内部ブロックに登録されたモジュール名を要求することができます。

JSFiddle Example

require(
    ['require','http://documentcloud.github.com/underscore/underscore-min.js'], 
    function(require){ 
     require(['underscore'],function(_){ 
      var a = _.intersection([1,2,3],[2,3,4]); 
      document.write("Underscore is available in the closure : " + a); 
     }) 
    } 
) 

それはかなり見ていないかもしれないが、それは彼らが依存するモジュールで直感的に必要になることができるように、初期の資産をロードするための推奨パターンかもしれません。