RequireJS order of dependencies

时间:2015-08-07 01:37:21

标签: javascript requirejs

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)

1 个答案:

答案 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