2014-09-28 49 views
0

我在基於RequireJs的應用程序中將baseUrl設置爲/angular有時候我想設置相對於底座的路徑,有時候我想將它設置爲相對於當前目錄。從`RequireJs`指定相對路徑

我對RequireJs很新,很困惑。

這是我現在有:

require([ 
    'require', 
    'angular', 
    'module/draft/draftDisplay'// module that I want relative to baseUrl 
], function(requireLocal, angular) { 

requireLocal('./autoSave'); // Modules that I want relative to current url 
requireLocal('./module'); 

它創建這個錯誤:Error: Module name "autoSave" has not been loaded yet for context: _

正如我以前說過,我不能得到RequireJs是怎樣工作的手柄。有些事情我不明白是:

1)什麼時候RequireJs使用的baseUrl,當它使用當前目錄

2)什麼是模塊ID和它的路徑之間的區別?

3)是否以前模塊的require([...],..數組中指定的方式影響後續的人怎麼都解決了(這似乎是這樣的,當我修修補補)

如果你可以包括在你的答案的那些東西,那會非常有幫助。

回答

1

1) When does RequireJs use the baseUrl and when does it use the current directory

baseUrl總是,當模塊名通過./../,在這種情況下,它使用了需要其它模塊的目錄前綴除外。

2) What's the difference between a module ID and its path?

該路徑包括baseUrl。例如。可能是類似scripts/vendor/angular/angular.js。模塊ID不包括baseUrl或後綴,例如對於baseUrl: 'scripts',上面的模塊ID將爲vendor/angular/angular

3) Does the way previous modules are specified in the require([...],.. array affect how subsequent ones are resolved (which seemed to be the case when I tinkered)


你的錯誤是從使用的require爲未裝載的模塊的同步版本號引起的。改用異步版本;如:

requireLocal(['./autoSave', './module'], function(autosave, module) { 
    // here autosave and module are loaded 
}); 
// BEWARE: Here neither autosave nor module are loaded 

但是你確定你想要內在的要求嗎?從您提供的信息,拉動需求外需可能就夠了,即

require(['require','angular','module/draft/draftDisplay','./autoSave','./module'],...) 

而且,所謂'module'進口在需要特殊的意義;它包含有關模塊當前模塊的信息;如果您字面上使用的是'./module',它將與'module'(第一個在該文件所在的目錄中查找module.js文件,第二個文件提供有關此模塊的信息)完全不同。