2015-04-01 81 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