从一个文件中需要多个模块
Requirejs multiple modules from one file
我需要使用一个文件中的 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);
});
modules/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 个模块?这可能吗?
您的代码存在的问题是,当您使用 define
命名模块时,您必须为其提供您打算用于该模块的 全名 。所以应该是define('modules/another-module'
但这不是唯一的问题。你需要这样:
require(['modules/message', 'modules/another-module'],
有多种方式可以解决这个问题,但这里有两种主要方式:
RequireJS 在 开始尝试加载 modules/another-module
之前完全加载 modules/message
。当它到达第二个模块时,它已经有一个 define
了。一切都很好。
RequireJS 开始加载 modules/another-module
首先。所以它将获取一个名为 modules/another-module.js
的文件,但找不到它,这将导致错误。
请注意,require
调用本身不会对传递给它的依赖项施加任何顺序。所以 RequireJS 可以完全自由地以任何它想要的顺序开始加载模块。您可以通过在运行时配置中使用 bundles
来解决第二个问题。例如:
bundles: {
"modules/message": [ "modules/another-module" ]
}
我需要使用一个文件中的 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);
});
modules/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 个模块?这可能吗?
您的代码存在的问题是,当您使用 define
命名模块时,您必须为其提供您打算用于该模块的 全名 。所以应该是define('modules/another-module'
但这不是唯一的问题。你需要这样:
require(['modules/message', 'modules/another-module'],
有多种方式可以解决这个问题,但这里有两种主要方式:
RequireJS 在 开始尝试加载
modules/another-module
之前完全加载modules/message
。当它到达第二个模块时,它已经有一个define
了。一切都很好。RequireJS 开始加载
modules/another-module
首先。所以它将获取一个名为modules/another-module.js
的文件,但找不到它,这将导致错误。
请注意,require
调用本身不会对传递给它的依赖项施加任何顺序。所以 RequireJS 可以完全自由地以任何它想要的顺序开始加载模块。您可以通过在运行时配置中使用 bundles
来解决第二个问题。例如:
bundles: {
"modules/message": [ "modules/another-module" ]
}