我需要从一个文件中使用2个模块。
的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!';
});
出于某种原因,Chrome出现错误未捕获错误:脚本错误:modules / another-module
目录结构:
|- appDirectory
|-- app
|--- modules
|---- message.js
|--- main.js
|--- require.js
|-- index.html
所以问题是:如何只使用一个require表达式从一个文件加载2个模块?这可能吗?
答案 0 :(得分:2)
您的代码存在的问题是,当您使用define
命名模块时,您必须为其提供您打算用于模块的全名。所以它应该是define('modules/another-module'
但这不是唯一的问题。你需要这样:
require(['modules/message', 'modules/another-module'],
有多种方法可以降低这种方式,但这里有两种主要方式:
RequireJS在开始尝试加载modules/message
之前完全加载modules/another-module
。当它到达第二个模块时,它已经有define
。一切都很好。
RequireJS首先开始加载modules/another-module
。因此,它会获取一个名为modules/another-module.js
的文件并且无法找到它,这会导致错误。
请注意,require
调用本身不会对传递给它的依赖项施加顺序。所以RequireJS可以完全自由地开始按照它想要的顺序加载模块。您可以在运行时配置中使用bundles
来解决第二个问题。例如:
bundles: {
"modules/message": [ "modules/another-module" ]
}