我正在使用RequireJS开发应用程序,并且我有一个用作dependece的模块。所有依赖的库都在" lib / vendor"中,所以,假设它调用" MyModule",它在" lib / vendor / MyModule / my.js中.." 在我的main.js中我有:
3 requirejs.config({
4 paths: {
5 my: './vendor/MyModule/my',
....
它有效,但问题是" my.js"还包括一些文件
define(["./lib/a", "./lib/b"], function (a,b) {
....
});
这些文件" a.js"和" b.js"在模块的文件夹中,所以结构应该是这样的:
index.html
lib
main.js
vendor
MyModule
my.js
lib
a.js
b.js
问题是my.js调用" a.js"或" b.js" RequireJS尝试将它们发现到" host.com/lib/lib/a.js"而是#34; host.com/lib/vendor/MyModule/lib/a.js" 根据" http://requirejs.org/docs/api.html#defdep"我正在做的事情应该有效,但事情并没有发生
答案 0 :(得分:2)
问题是相对依赖关系是相对于模块的 name 而不是路径加载的。你参考这个例子:
//my/shirt.js now has some dependencies, a cart and inventory
//module in the same directory as shirt.js
define(["./cart", "./inventory"], function(cart, inventory) {
仅当my/shirt.js
文件作为my/shirt
模块加载时才会起作用。换句话说,在此示例中假设没有paths
设置将更改模块'路径。
以下是您的代码:
RequireJS加载main
。您没有设置baseUrl
,因此baseUrl
设置为/lib
。
您需要my
。 RequireJS将其解析为/lib/vendor/MyModule/my.js
并加载它。
my
模块需要./lib/a
和./lib/b
。当RequireJS解析相对路径时,它使用当前模块的名称(my
)作为起点。两个要求中的初始时间段意味着获取当前模块名称的目录部分并将其余路径添加到其中。" my
的目录部分是空字符串,因此两条路径变为lib/a
和lib/b
,然后与baseUrl合并,形成/lib/lib/a
和/lib/lib/b
。
请注意,此计算中paths
的{{1}}设置根本未使用。
解决问题的一种方法是使用my
代替map
。而paths
将路径与模块名称相关联,paths
将模块名称与模块名称相关联,因此:
map
这告诉RequireJS在所有模块(map: {
'*': {
my: 'vendor/MyModule/my'
}
}
)中,如果需要名称为*
的模块,则加载名为my
的模块。