2013-03-12 196 views
1

使用requirejs,我有兩個文件依賴於相同的模塊。 我必須確保我總是在兩個依賴關係中使用相同的模塊名稱嗎? 例如,如果我定義了require.config的路徑:requirejs - 在不同文件中加載具有不同名稱的相同模塊

'myMod':'src/js/myModule' 

再一次使用此名稱和一次性使用的實際路徑,例如:

//in a.js 
define(function(require){ 
var mod = require('myMod'); 
}); 

//in b.js 
define(function(require){ 
var mod = require('src/js/myModule'); 
}); 

顯然,最好的練習會在任何地方使用模塊名稱,但我想知道爲什麼會導致實際的錯誤。

是否requirejs在所使用的模塊名稱和實際加載的模塊之間存儲映射?

回答

3

正如你自己說:

顯然,最好的做法是使用模塊的名字隨處可見

RequireJS強制執行這種做法,在一定程度上。問題是,當你告訴你的paths中的RequireJS 'myMod':'src/js/myModule'你實際上是在說你想要以名稱myMod加載src/js/myModule。很可能,如果您接着以完整路徑引用它,這是您的錯誤。如果這發生在我的代碼中,我會認爲這是一個錯誤。所以我希望RequireJS在發生這種情況時失敗。

還有語義問題。基本情況是,如果傳遞給require的兩個名稱不同,則一旦相對路徑得到解決,則它們引用兩個不同的模塊。通過這個,如果你做require('myMod')require('src/js/myModule')你期待兩個不同模塊。如果你做require('myMod')require('myMod'),你會得到相同的模塊。所以你設定了paths,你真正想要什麼? 相同模塊或不同模塊?

RequireJS有兩種方法可以給你。如果要同時模塊名稱給你相同的模塊,然後刪除您paths配置和使用map配置,而不是:

map: { 
    '*': { 
    myMod: 'src/js/myModule' 
    } 
} 

這意味着「在所有模塊(*),如果提出要求對於模塊myMod,則代之以加載模塊src/js/myModule。「意圖非常清晰。

如果您想改爲兩條路徑,給你不同的模塊雖然它們共享相同的源,您可以使用加載相同來源的模塊,但有一個RequireJS插件RequireJS註冊這個單一來源爲做到這一點不同的模塊。

相關問題