require.js:访问所有加载的模块(require.js: Access all loaded

2019-06-26 16:45发布

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

背景:
我想自动调用一个init()所有的人都被加载后的我的JavaScript模块的功能,请参阅require.js + Backbone.js的:如何构建有一个初始化函数模块? 如果没有require.js我挂绕在我自己的模块存储,并呼吁各init()函数。
我现在想require.js做到这一点。 我知道,调用my_custom_init_function_favoritecolor_petname_love123每一个加载的模块(包括外部库)是危险的。 我希望这会造成比人工饲养的所有模块(这些模块的需求)的名单上最新的少一些麻烦。 忘记一个模块的init()比有我的自定义函数名(尽管后者可能是难以调试)第三方库更容易。

或者有没有人有关于如何完成一个更好的主意?

Answer 1:

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

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



Answer 2:

刚刚完成我的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();
    });
});


Answer 3:

我很懒,所以我就这样做:

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

基于这里其他的答案。



文章来源: require.js: Access all loaded modules