2011-12-10 43 views
37

Estoy empezando con require.js. He completado con éxito jquery, algunos complementos y algunos de mis propios módulos. Intento interactuar con mis módulos (o jquery) desde Firebug (o la consola JS de Google Chrome), y no estoy teniendo mucha suerte.¿Interactuar con los módulos require.js desde la consola Firebug/Chrome?

¿Cuál es la forma correcta de acceder a estos módulos desde la consola?

Respuesta

52

Digamos que tenemos /app/scripts/methodsModule.js módulo que devuelve unos métodos:

define({ 
    someMethod: function() { 
     // do stuff 
    }, 
    anotherMethod: function() { 
     // do some more stuff 
    } 
}); 

En nuestros /app/scripts/main.js archivo de datos principal que tenemos:

require(['methodsModule'], function(methods) { 
    methods.someMethod() // call someMethod 
    methods.anotherMethod() // call anotherMethod 
}) 

Una vez RequireJS carga hasta nuestros datos-principal, podemos tener acceso a todos los módulos que ya han sido cargados por RequireJS desde la línea de comandos de la consola JavaScript, así:

>> methods = require('methodsModule'); // requireJS has module methodsModule stored 
>> methods.someMethod() // call someMethod 
>> methods.anotherMethod() // call anotherMethod 

Si un módulo no se ha cargado por una llamada a require() o() define, tenemos que pasar nuestra propia llamada de retorno para la función de requerir a llamar después de que el módulo ha sido cargado:

>> myCB = function(methods) { methods.someMethod() } 
>> require(['methodsModule'], myCB) 

lo contrario , requireJS arroja un error que indica que el módulo aún no se ha cargado ..

+1

¿Funciona esto con los scripts "optimizados" de requireJS? Tal vez estoy haciendo algo mal aquí, pero no pareció funcionar para mí. – Stephen

+0

Aún vigente a partir del 20/05/2015. Al convertir un proyecto "primitivo" a AMD, necesitaba asegurarme de que todo estaba funcionando. Sin embargo, no pude localizar a dónde iba el objeto del módulo devuelto después de definir ejecutado. Gran explicación –

12

Hay una forma de no utilizar devoluciones de llamada.

Si módulo que no se requería en la consola o aplicación antes, sólo puede requerir primero:

require(['methodsModule']); 

después de que se puede utilizar "dinámica" requieren para acceder a ella:

require('methodsModule').someMethod(); 
+0

Eso fue mucho más fácil de lo que estaba intentando, '+ 0.1E1'. Sin embargo, prefiero cargar el módulo en la ventana para facilitar el acceso. 'require ([m = 'lib/imagesloaded']); imagesLoaded = require (m); ' – Orwellophile

Cuestiones relacionadas