require.js:访问所有加载的模块

问题描述:

有什么办法可以访问所有加载的require.js模块吗?require.js:访问所有加载的模块

背景:
我想自动调用我的javascript模块的init()功能所有的人都加载后,看到require.js + backbone.js: How to structure modules that have an initialize function? 没有require.js我挂绕在我自己的模块存储,并呼吁各init()功能。
我现在想用require.js来做到这一点。我知道调用每个加载模块(包括外部库)的my_custom_init_function_favoritecolor_petname_love123是危险的。我希望这会比手动保存所有模块的清单(以及这些模块的要求)更新更为麻烦。忘记一个模块init()比拥有自定义函数名的第三方库更可能(尽管后者可能更难以调试)。

还是没有人有更好的想法如何实现这一目标?

是,require.s.contexts._.defined是一个对象,它的键是模块的名称和值包括从模块返回的值。

require.s.contexts._.defined包括所有的模块(或者define()require()诸如JavaScript文件是程序的出发点和使用data-main为RequireJS被指示)。

+4

注册表和上下文定义有什么区别? 我在define('Mod',...)后面的上下文._。注册表对象上看到一个新对象,但是没有在上下文._。defined中定义。 在require(['Mod'],...)调用后,我看到上下文._。中定义的模块。 – alexK85 2014-05-29 04:37:22

刚刚在我的RequireJS项目中完成了类似的行为。 require.s.contexts['_'].registry保存已注册模块的列表。

我使用Underscore.js来获取,过滤和迭代模块列表。也许下面的代码片段可以帮助你:

var modules_registered = _.keys(require.s.contexts['_'].registry); 
var modules_to_be_initialized = _.filter(modules_registered, function(module_title) { 
    return module_title.indexOf('modules') > -1; 
}); 

_.each(modules_to_be_initialized, function(module_name) { 
    require([module_name], function(current_module) { 
     current_module.init(); 
    }); 
}); 

我很懒,所以我就这样做:基于这里其他的答案

var modulesToLoad = Object.keys(require.s.contexts['_'].registry); 
    require(modulesToLoad);