如何在RequireJS中结合不同的模块加载方式?
问题描述:
有一个代码(模块模块1,模块2和单词数被同时加载):如何在RequireJS中结合不同的模块加载方式?
define(['module1', 'module2', 'module3'], function (module1, module2, module3) {
return { /* ... */ };
});
还有另外一个(模块1和模块2被装载一个又一个单词数是按需加载,动态地) :
define(function (require) {
var module1 = require('module1');
var module2 = require('module2');
return {
loadModule3: function() {
var module3 = require('module3');
}
};
});
如何可以如在第一实施例的同时结合这两种方法,使模块1和2至负载,并且单词数,以如在第二示例动态加载(但不产生附加的模块) ?
答
第二个示例不像您想象的那样工作。 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的代码路径应该从那里开始。