2013-05-09 99 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測試頁面中連接一些奇怪的debug/config代碼。我想枚舉哪些模塊名稱具有定義的自定義路徑。 This question涉及到的問題,但只讓我查詢已知的模塊,而不是枚舉它們。

回答

4

我不認爲需要公開任何地方,至少我無法通過巨大的代碼庫找到它。有兩種方法可以實現這一點。第一個也是最明顯的是將配置定義爲全局變量。第二個,也是更接近你想要什麼,是創建一個需要插件,覆蓋加載功能到配置連接到模塊:

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

它是可用的,但它是一個實現細節不應該取決於生產代碼(你已經說過它不適用,但是公平地警告給其他人!)

主要上下文的配置可在require.s.contexts._.config處獲得。其他配置也將與該關聯的任何名稱都掛起該屬性contexts

+0

很好的答案,但很快的問題。爲什麼不在生產代碼中使用它? – Shanimal 2015-03-07 00:29:28

+1

@Simalimal由於事情可能會隨着這個對象的變化而變化(因爲它沒有直接暴露或在doc中可用),而且你不想突然破壞你的產品代碼。 – Vishwanath 2015-03-15 15:33:59