2013-05-09 4 views
6

pass custom configuration into a moduleへの道がある:アクセスRequireJSパス構成

あなたは、モジュールからアクセスできる
requirejs.config({ 
    baseUrl: './js', 
    paths: { 
     jquery: 'libs/jquery-1.9.1', 
     jqueryui: 'libs/jquery-ui-1.9.2' 
    }, 
    config: { 
     'baz': { 
      color: 'blue' 
     } 
    } 
}); 

define(['module'], function (module) {   
    var color = module.config().color; // 'blue' 
}); 

しかし、またアクセスする方法がありますトップレベルのパス設定、これは何か?

define(['module', 'require'], function (module, require) {   
    console.log(module.paths()); // no method paths() 
    console.log(require.paths()); // no method paths() 
}); 

参考までに、これは実稼働サイトではありません。私は、QUnitのテストページ内でいくつかの奇妙なデバッグ/設定コードを結びつけようとしています。どのモジュール名にカスタムパスが定義されているかを列挙したいと思います。 This questionは問題に触れましたが、既知のモジュールだけを照会させ、列挙しません。

答えて

4

私はどこにでも公開する必要はないと思います。少なくとも、私は巨大なコードベースを見て見つけることができません。あなたがこれを達成できる2つの方法があります。最初の、最も明白なのは、configをグローバル変数として定義することです。第二、そしてあなたが望むものに近いが、モジュールへのコンフィグを接続するロード機能をオーバーライドする必要がプラグインを作成することです:

define({ 
    load: function (name, req, onload, config) { 
     req([name], function (value) { 
      value.requireConfig = config; 
      onload(value); 
     }); 
    } 
}); 
18

それは可能ですが、それはすべきではない実装の詳細です生産コードに依存しています(あなたはすでにそうではないと言っていますが、他人には公正な警告をしています)。

メインコンテキストの設定はrequire.s.contexts._.configです。他の設定でも、それに関連付けられた名前を持つcontextsプロパティからハングアップします。

+0

良い答えですが簡単な質問です。これをプロダクションコードに使用してみませんか? – Shanimal

+1

@Shanimal将来的には(このオブジェクトが直接公開されていないか、またはdocで利用可能なので)このオブジェクトが変更される可能性があり、プロダクションコードを突然破棄したくないためです。 – Vishwanath

関連する問題