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

有没有办法访问require.js的所有加载模块?

背景:
我想自动调用我的JavaScript模块的init()函数加载后,请参阅require.js + backbone.js:如何构造具有初始化函数的模块? 没有require.js我打开了我自己的模块存储并调用每个init()函数。
我现在想用require.js来做到这一点。 我知道调用每个加载模块(包括外部库)的my_custom_init_function_favoritecolor_petname_love123是危险的。 我希望这会比手动保存所有模块的清单(以及这些模块的要求)更新更为麻烦。 忘记一个模块init()比拥有自定义函数名称的第三方库更可能(尽pipe后者可能更难以debugging)。

还是有人有一个更好的想法,如何做到这一点?

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

require.s.contexts._.defined包含了所有的模块( define()或者require()例如程序起点的Javascript文件,用requireJS的data-main表示)。

刚刚在我的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); 

基于这里的其他答案。