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

时间:2015-04-01 09:18:18

标签: javascript module requirejs

我需要从一个文件中使用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个模块?这可能吗?

1 个答案:

答案 0 :(得分:2)

您的代码存在的问题是,当您使用define命名模块时,您必须为其提供您打算用于模块的全名。所以它应该是define('modules/another-module'

但这不是唯一的问题。你需要这样:

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

有多种方法可以降低这种方式,但这里有两种主要方式:

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

  2. RequireJS首先开始加载modules/another-module 。因此,它会获取一个名为modules/another-module.js的文件并且无法找到它,这会导致错误。

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

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