Javascript 带有RequireJS的路径问题
我正在用RequireJS开发一个应用程序,我有一个模块用作dependece。所有依赖项的库都位于“lib/vendor”中,因此,假设它调用“MyModule”,则位于“lib/vendor/MyModule/my.js.” 在我的main.js中,我有:Javascript 带有RequireJS的路径问题,javascript,requirejs,js-amd,Javascript,Requirejs,Js Amd,我正在用RequireJS开发一个应用程序,我有一个模块用作dependece。所有依赖项的库都位于“lib/vendor”中,因此,假设它调用“MyModule”,则位于“lib/vendor/MyModule/my.js.” 在我的main.js中,我有: 3 requirejs.config({ 4 paths: { 5 my: './vendor/MyModule/my', .... 它是有效的,但问题是“my.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
问题是当调用“a.js”或“b.js”RequireJS的my.js试图将它们查找到“host.com/lib/lib/a.js”而不是“host.com/lib/vendor/MyModule/lib/a.js”时
根据“”的说法,我正在做的事情应该是可行的,但它没有发生问题是相对依赖项是相对于模块的名称而不是路径加载的。您可以参考以下示例:
//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
模块加载时,这才有效。换句话说,在本例中,假设没有将更改模块路径的路径设置
下面是您的代码发生的情况:
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/b
请注意,my
的path
设置在该计算中根本不使用
解决问题的一种方法是使用map
而不是路径
。鉴于路径
将路径与模块名称相关联,映射
将模块名称与模块名称相关联,因此:
map: {
'*': {
my: 'vendor/MyModule/my'
}
}
这告诉RequireJS,在所有模块(*
)中,如果需要名为my
的模块,则加载名为vendor/MyModule/my
的模块