有一个代码(模块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如第二个示例中那样动态加载(但不创建其他模块)?
答案 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的代码路径应该从那里开始。