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

RequireJs - Определить vs Требовать

Для модулей я не возвращаю объект, который я использовал, вместо определения. Например, у меня есть следующий плагин jQuery (jquery.my-plugin.js):

require(['jquery'], function($) {
    $.fn.myPlugin = function(options) {
        ...
    };
});

Теперь, если я скажу следующее в другом модуле:

require(['jquery', 'jquery.my-plugin'], function($) {
    $('#element').myPlugin();
});

Я нашел, что это не работает, потому что myPlugin не был зарегистрирован. Однако, если я изменяю требование к определению в моем модуле jquery.my-plugin, тогда он отлично работает.

Я был бы признателен, если бы кто-нибудь мог понять, почему я должен это делать. Мне нравится понимать что-то полностью, прежде чем я начну использовать его. Благодаря

4b9b3361

Ответ 1

По сути, когда вы используете require, вы говорите: "Я хочу этого, но я тоже хочу все его зависимости". Таким образом, в приведенном ниже примере нам требуется A, но для этого требуется поиск всех зависимостей и их загрузка перед продолжением.

require(['a'], function(a) {
    // b, c, d, e will be loaded
});

// File A
define(['b','c','d','e'], function() {
    return this;
});

Общее правило: вы используете define, когда хотите определить модуль, который будет повторно использоваться вашим приложением, и вы используете require, чтобы просто загрузить зависимость.

Ответ 2

Ниже приведен код, который должен находиться внутри jquery.my-plugin.js, который определяет модуль под названием "jquery.my-plugin", который может использоваться как зависимость в другом месте.

define(['jquery'], function($) { //jquery is a dependency to the jquery.my-plugin module
    $.fn.myPlugin = function(options) { //adds a function to the *global* jQuery object, $ (global since jQuery does not follow AMD)
        ...
    };
});

Ниже приведен фрагмент кода, в который вы хотите прикрепить свою функцию плагина к глобальному объекту jQuery, а затем использовать его...

require(['jquery.my-plugin'], function() { // jquery.my-plugin is loaded which attaches the plugin to the global JQuery object as shown above, then this function fires

    //the only reason $ is visible here is because it global. If it was a module, you would need to include it as a dependency in the above require statement
    $('#element').myPlugin(); //the $ refers to the global object that has the plugin attached
});