Взаимодействовать с модулями require.js из консоли Firebug / Chrome?

40

Я только начинаю работать с require.js. Я успешно обернул jquery, некоторые плагины и пару собственных модулей. Я пытаюсь взаимодействовать со своими модулями (или jquery) из Firebug (или консоли Google Chrome JS), и мне не очень везет.

Как правильно получить доступ к этим модулям с консоли?

54

Скажем, у нас есть модуль /app/scripts/methodsModule.js, который возвращает несколько методов:

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

В нашем главном файле данных /app/scripts/main.js у нас есть:

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

После того, как requireJS загрузит нашу главную часть данных, мы сможем получить доступ к любым модулям, которые уже были загружены с помощью requireJS, из командной строки консоли javascript следующим образом:

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

Если модуль не был загружен вызовом require () или define (), мы должны передать наш собственный обратный вызов для вызова функции require после загрузки модуля:

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

В противном случае requireJS выдает ошибку о том, что модуль еще не загружен.

2
  • 1
    работает ли это с "оптимизированными" скриптами requireJS? Может я здесь что-то делаю не так, но у меня вроде не получилось.
    Stephen
    29 авг.
  • Действует по состоянию на 20.05.2015. При преобразовании «примитивного» проекта в AMD мне нужно было убедиться, что все работает. Однако я не мог определить, куда возвращался объект модуля после выполнения определения. Отличное объяснение. 20 мая '15 в 18:13
15

Есть способ без использования обратных вызовов.

Если ваш модуль не требовался в консоли или в вашем приложении раньше, вы можете просто сначала потребовать его:

require(['methodsModule']);

после этого вы можете использовать "динамическое" требование для доступа к нему:

require('methodsModule').someMethod();
1
  • Это было серьезно проще, чем то, что я пытался +0.1E1. Я предпочитаю просто загружать модуль в окно для облегчения доступа.require([m='lib/imagesloaded']); imagesLoaded=require(m); 20 сен '16 в 2:22