2013-03-12 179 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注册这个单一来源为做到这一点不同的模块。

相关问题