Javascript 带有RequireJS的路径问题

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”也包含一些文

我正在用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
问题是当调用“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
    的模块