2012-09-04 289 views
9

我在requirejs中存在相對路徑問題。相對路徑不適用於路徑

首先,我有以下結構。我有一個虛擬主機上運行它(os.com)和路徑是os.com/test

enter image description here

的index.html

<script data-main="config" src="require.js"></script> 

config.js

require.config({ 

    baseUrl: "./apps", 
    deps: ['ui'], 
    paths: { 
    ui: 'ui/ui', 
    system: 'system/system', 
    core: 'core/core' 
    } 


}); 

ui.js

define(['./class/menuBuilder',"./class/window"], function(menuBuilder, windowBuilder){ 


    return { 
     menuBuilder: menuBuilder, 
     windowBuilder: windowBuilder 
    } 

}); 

當我運行它時,出現以下錯誤。

GET http://os.com/test/apps/class/menuBuilder.js 404 (Not Found) 
GET http://os.com/test/apps/class/window.js 404 (Not Found) 

如果我拿出從「路徑」屬性「UI」屬性然後更改DEPS爲[「UI/UI」],它的工作原理,但我想用路徑。

更改config.js

require.config({ 

    baseUrl: "./apps", 
    deps: ['ui/ui'], 
    paths: { 
    system: 'system/system', 
    core: 'core/core' 
    } 


}); 

如何更改我的配置,使路徑和相對路徑一起工作?

回答

12

我有類似的問題。我沒有deps:'ui'部分在我的配置中,只是路徑設置,但仍然是相對模塊引用('./class/menuBuilder')不能從加載了路徑的模塊(「ui:'ui/ui'「),而是使用baseUrl。爲了解決這個問題,我將'ui'定義爲一個包:

require.config({ 

    baseUrl: "./apps", 
    deps: ['ui'], 
    paths: { 
    system: 'system/system', 
    core: 'core/core' 
    }, 
    packages : [ 
    { 
     name: 'ui', 
     location : 'ui', 
     main : 'ui' 
    }, 
    ] 

}); 

在這種情況下,require會正確加載相對路徑的模塊。

這裏是一個有用的帖子:Relative paths with RequireJS modules/packages

4

這裏的解決方案是使用圖配置,而不是路徑配置。路徑配置只能用於文件夾,而不能用於模塊本身。地圖配置適用於單個模塊。

所以嘗試:

require.config({ 
    map: { 
    '*': { 
     'ui': 'ui/ui' 
    } 
    } 
});