Когда следует использовать require() и когда использовать define()?

Я играю с requirejs в течение последних нескольких дней. Я пытаюсь понять различия между define и require.

Определить, по-видимому, разрешить разделение модулей и разрешить привязку зависимостей. Но он загружает все файлы, необходимые для начала. Пока требуется только то, что вам нужно, когда вам это нужно.

Могут ли эти два использоваться вместе и для каких целей каждый из них будет использоваться?

Ответ 1

С define вы регистрируете модуль в require.js, который затем может зависеть от других определений модулей или требовать операторов. С помощью require вы просто загружаете/используете модуль или файл javascript, который может быть загружен require.js. Для примера рассмотрим документацию

Мое правило:

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

  • Требовать: если вы просто хотите загрузить и использовать материал.

Ответ 2

Из исходного кода require.js (строка 1902):

/**
 * The function that handles definitions of modules. Differs from
 * require() in that a string for the module should be the first argument,
 * and the function to execute after dependencies are loaded should
 * return a value to define the module corresponding to the first argument's
 * name.
 */

Функция define() принимает два необязательных параметра (строку, которая представляет идентификатор модуля и массив требуемых модулей) и один требуемый параметр (метод factory).

Возврат метода factory MUST возвращает реализацию для вашего модуля (так же, как Module Pattern делает).

Функция require() не должна возвращать реализацию нового модуля.

Используя define(), вы спрашиваете что-то вроде "запустите функцию, которую я передаю в качестве параметра, и назначьте все, что возвращается в идентификатор, который я передаю, но прежде, убедитесь, что эти зависимости загружен".

Используя require(), вы говорите что-то вроде "функция, которую я передаю, имеет следующие зависимости, проверьте, загружены ли эти зависимости до ее запуска".

Функция require() - это то, где вы используете определенные модули, чтобы убедиться, что модули определены, но вы не определяете там новые модули.

Ответ 3

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

define используется для определения именованных или неназванных модулей на основе предложения с использованием следующей подписи:

define(
module_id /*optional*/, 
[dependencies] /*optional*/, 
definition function /*function for instantiating the module or object*/
);

требуют, с другой стороны, обычно использовать для загрузки кода в файле JavaScript верхнего уровня или в модуле, если вы хотите динамически извлекать зависимости

Подробнее см. https://addyosmani.com/writing-modular-js/.

Ответ 4

require() и define(), которые используются для загрузки зависимостей. Существует существенное различие между этими двумя методами.

Его очень простые парни

Требовать(): метод используется для немедленной работы. define(): метод используется для определения модулей для использования в нескольких местах (повторное использование).

Ответ 5

Общие правила:

  1. Вы используете определение, когда вы хотите определить модуль, который будет использоваться повторно

  2. Вы используете require для простой загрузки зависимости

    //sample1.js file : module definition 
    define(function() {
          var sample1 = {};
          //do your stuff
         return sample1;
     });
    
    //sample2.js file : module definition and also has a dependency on jQuery and sample1.js
    define(['jquery', 'sample1'], function($,sample1) {
        var sample2 = {
            getSample1:sample1.getSomeData();
        };
        var selectSomeElement = $('#someElementId');
        //do your stuff....
        return sample2;
    });
    
    //calling in any file (mainly in entry file)
    require(['sample2'], function(sample2) {
        // sample1 will be loaded also
    });
    

Надеюсь, это поможет вам.