如何在RequireJS中组合不同的模块加载方式?

时间:2014-10-17 17:31:51

标签: javascript requirejs

有一个代码(模块module1,module2和module3同时加载):

define(['module1', 'module2', 'module3'], function (module1, module2, module3) {
    return { /* ... */ };
});

还有另一个(module1和module2一个接一个地加载,module3按需加载,动态):

define(function (require) {
    var module1 = require('module1');
    var module2 = require('module2');
    return { 
        loadModule3: function () {
           var module3 = require('module3');
        }
   };
});

如何组合这两种方法并使模块1和2与第一个示例同时加载,而module3如第二个示例中那样动态加载(但不创建其他模块)?

1 个答案:

答案 0 :(得分:1)

第二个例子不像你想象的那样工作。 define(function(require) { ... })语法只是一个syntactic sugar,基本上转换为类似于第一个示例的异步调用,在执行模块函数之前并行加载所有三个必需的模块。

如果你真的打算强制执行加载订单,你可能会这样:

define(function (require) {
    // these two modules will be loaded in parallel
    var module1 = require("module1");
    var module2 = require("module2");
    return { 
        loadModule3: function () {
            // this module will be loaded "on-demand", when `loadModule3` is called
            require(["module3"], function(module3) {
                // here modules 1,2 and 3 are available
            });
        }
    };
});

请注意,您所谓的“按需”加载将确保回调函数中的“module3”可用,依赖于module3的代码路径应该从那里开始。