从一个文件中需要多个模块

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'],

有多种方式可以解决这个问题,但这里有两种主要方式:

  1. RequireJS 在 开始尝试加载 modules/another-module 之前完全加载 modules/message 。当它到达第二个模块时,它已经有一个 define 了。一切都很好。

  2. RequireJS 开始加载 modules/another-module 首先。所以它将获取一个名为 modules/another-module.js 的文件,但找不到它,这将导致错误。

请注意,require 调用本身不会对传递给它的依赖项施加任何顺序。所以 RequireJS 可以完全自由地以任何它想要的顺序开始加载模块。您可以通过在运行时配置中使用 bundles 来解决第二个问题。例如:

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