if you have a RequireJS module like so:
define(
[
'#patches',
'backbone',
'underscore',
'react',
'#allCollections',
'#allModels',
'app/js/routers/router',
'#allTemplates',
'#allControllers',
'#allRelViews'
],
function(){
var patches = arguments[0];
});
is there any way to know which dependency gets loaded first? In my case, '#patches' is a few window.X utility functions that I want to load before anything else. Do I need to configure this a different way to ensure this?
(in my case "#' is just my own notation to denote a module whose path is predefined in my main config file)
答案 0 :(得分:14)
来自文档:http://requirejs.org/docs/api.html#mechanics
" RequireJS等待加载所有依赖项,找出调用定义模块的函数的正确顺序,然后在调用这些函数的依赖项后调用模块定义函数。请注意,由于它们的子依赖关系和网络加载顺序,可以按任何顺序调用给定模块定义函数的依赖关系。"
我认为这可能有所帮助:http://www.sitepoint.com/understanding-requirejs-for-effective-javascript-module-loading/(参见"管理相关文件的顺序")
RequireJS使用异步模块加载(AMD)来加载文件。每个依赖模块将按给定顺序开始通过异步请求加载。即使考虑了文件顺序,由于异步性质,我们无法保证第一个文件在第二个文件之前加载。因此,RequireJS允许我们使用shim配置来定义需要以正确顺序加载的文件序列。让我们看看我们如何在RequireJS中创建配置选项。
requirejs.config({
shim: {
'source1': ['dependency1','dependency2'],
'source2': ['source1']
}
});
希望有所帮助
编辑:正如评论中所说,使用Shim for AMD模块是一个坏主意,只使用垫片非AMD模块并管理依赖项顺序。 对于AMD模块,requirejs将管理加载顺序。 评论中的一个很好的链接(感谢Daniel Tulp)==> Requirejs why and when to use shim config