library example data common javascript requirejs js-amd

javascript - example - require.js: accede a todos los módulos cargados



require js html (3)

¿Hay alguna forma de acceder a todos los módulos cargados de require.js?

Fondo:
Quiero llamar automáticamente a la función init() de mis módulos javascript después de que se hayan cargado todos, consulte require.js + backbone.js: ¿Cómo estructurar los módulos que tienen una función de inicialización? Sin require.js hice un bucle sobre mi propio módulo de almacenamiento y llamé a cada función init() .
Ahora quiero hacer esto con require.js. Soy consciente de que llamar a my_custom_init_function_favoritecolor_petname_love123 de cada módulo cargado (incluidas las bibliotecas externas) es peligroso. Espero que esto cause menos problemas que mantener manualmente una lista de todos los módulos (y los requisitos de estos módulos) actualizada. Olvidar un módulo init () es mucho más probable que una biblioteca de terceros que tenga mi nombre de función personalizada (aunque este último sea probablemente más difícil de depurar).

¿O alguien tiene una mejor idea de cómo lograrlo?


Acabo de terminar un comportamiento similar dentro de mi proyecto RequireJS. require.s.contexts[''_''].registry contiene la lista de los módulos registrados.

Estoy usando Underscore.js para obtener, filtrar e iterar la lista de módulos. Tal vez el siguiente fragmento de código te ayude a:

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(); }); });


Sí, require.s.contexts._.defined es un objeto cuyas claves son los nombres de los módulos y los valores incluyen el valor devuelto por ese módulo.

require.s.contexts._.defined incluye todos los módulos ( define() o require() , como el archivo de Javascript que es el punto de inicio del programa y se indica mediante data-main para RequireJS).


Soy perezoso, así que acabo de hacer esto:

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

Basado en otras respuestas aquí.