2015-04-01 35 views
2

我需要從一個文件使用2個模塊。Requirejs來自一個文件的多個模塊

的index.html

<!DOCTYPE html> 
    <html> 
     <head> 
      <title></title> 
      <script data-main="app/main" src="app/require.js"></script> 
     </head> 
     <body> 

     </body> 
    </html> 

main.js

require(['modules/message', 'modules/another-module'], function(message, anotherModule) { 
     alert(anotherModule); 
    }); 

模塊/ message.js

define(function() { 
    return 'Hello there!'; 
}); 

define('another-module', function() { 
    return 'hi there!'; 
}); 

對於這樣我的理由鉻去與錯誤未捕獲的錯誤:腳本錯誤:模塊/其他模塊

目錄結構:

|- appDirectory 
|-- app 
|--- modules 
|---- message.js 
|--- main.js 
|--- require.js 
|-- index.html 

因此問題是:我怎麼能只用裝載2個模塊從一個文件一個需要表達?那可能嗎?

回答

1

您的代碼的問題是,當您使用define命名模塊時,您必須爲其指定全名,您打算將其用於該模塊。所以它應該是define('modules/another-module'

但這不是唯一的問題。你需要這樣的:

require(['modules/message', 'modules/another-module'], 

有多種方式,其中這可以往下走,但有兩個,在這裏感興趣的主要方式:modules/message

  1. RequireJS完全加載它開始嘗試加載modules/another-module。到達第二個模塊時,它已經有一個define。一切安好。

  2. RequireJS開始加載modules/another-module第一個。所以它會獲取一個名爲modules/another-module.js的文件,並且不會找到它,這會導致錯誤。

請注意,require調用本身不會對傳遞給它的依賴項施加任何順序。所以RequireJS完全可以自由地以任何順序開始加載模塊。您可以在運行時配置中使用bundles來解決第二個問題。例如:

bundles: { 
    "modules/message": [ "modules/another-module" ] 
} 
+0

所以在這裏,我明白了一個重要的觀點,在加載依賴關係上沒有順序。 – 2016-07-16 11:49:51

+0

傳遞給'require'的模塊列表沒有定義一個訂單。通過「定義」調用創建訂單。如果在傳遞給define的依賴項中調用require(['a','b'])''和'a'列出'b',那麼'b'必然會在'a'之前加載。 – Louis 2016-07-16 11:55:14

相關問題