2014-05-06 72 views
0

我正在開發與RequireJS應用程序,我有一個模塊用作依賴。所有的依賴關係的庫在 「LIB /供應商」,所以,assumming它稱之爲 「MyModule的」,它是在 「LIB /供應商/ MyModule的/ my.js ..」 在我main.js我有:RequireJS的路徑問題

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 

該pro blem是當my.js調用「a.js」或「b.js」時,RequireJS嘗試將它們找到「host.com/lib/lib/a.js」,而不是「host.com/lib/vendor/MyModule/ LIB/a.js」 據‘http://requirejs.org/docs/api.html#defdep’的事情我做它應該工作,但情況並非如此

回答

2

的問題是相對的依賴是相對於你的模塊加載,而不是它的路徑。您指的這個例子:

//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設置可以改變模塊的路徑。

這裏是你的代碼會發生什麼:

  1. RequireJS負荷main。您不設置baseUrl,因此baseUrl設置爲/lib

  2. 您需要my。 RequireJS將其解析爲/lib/vendor/MyModule/my.js並加載它。

  3. my模塊需要./lib/a./lib/b。當RequireJS解析相對路徑時,它使用當前模塊的名稱(my)作爲起點。兩個需求中的初始階段意味着「獲取當前模塊名稱的目錄部分並將其餘路徑添加到它」。 my的目錄部分是空字符串,因此兩條路徑變成lib/alib/b,然後與baseUrl組合形成/lib/lib/a/lib/lib/b

    請注意,mypaths設置爲在此計算中根本不使用

一種方式來解決您的問題將是使用map而不是paths。而paths聯營路徑模塊名稱,map副模塊名稱模塊的名稱,以便:

map: { 
    '*': { 
     my: 'vendor/MyModule/my' 
    } 
} 

這告訴RequireJS,在是否需要與名my模塊的所有模塊(*),名稱爲vendor/MyModule/my模塊加載。