Подтвердить что ты не робот

Require.js: доступ ко всем загруженным модулям

Есть ли способ получить доступ ко всем загруженным модулям require.js?

Фон:
Я хочу автоматически вызывать функцию init() моих javascript-модулей после загрузки всех них, см. require.js + backbone.js: как структурировать модули, которые имеют функцию инициализации? Без require.js я зациклился на своем собственном модульном хранилище и вызвал каждую функцию init().
Теперь я хочу сделать это с помощью require.js. Я знаю, что вызов my_custom_init_function_favoritecolor_petname_love123 каждого загруженного модуля (включая внешние библиотеки) опасен. Я надеюсь, что это вызовет меньше проблем, чем ручное ведение списка всех модулей (и требований этих модулей) до современных. Забыть один модуль init() гораздо более вероятен, чем сторонняя библиотека, имеющая мое собственное имя функции (хотя последнее, вероятно, сложнее отлаживать).

Или кто-нибудь лучше знает, как это сделать?

4b9b3361

Ответ 1

Да, require.s.contexts._.defined - это объект, в котором его ключи являются именами модулей, а значения включают значение, возвращаемое из этого модуля.

require.s.contexts._.defined включает в себя все модули (либо define(), либо require(), такие как файл Javascript, являющийся отправной точкой программы, и обозначается с помощью data-main для RequireJS).

Ответ 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();
    });
});

Ответ 3

Я ленив, поэтому я просто сделал это:

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

На основе других ответов здесь.