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

RequireJS: Разница между require() и define()

В RequireJS, в чем основное отличие между использованием require() Vs define();

require(['a'], function(a) {
    // some code
});

// A.js
define(['b','c','d','e'], function() {
    //some code
});

Любые варианты использования будут очень полезными.

4b9b3361

Ответ 1

Одно основное отличие, которое раздражало меня в раннем использовании, заключалось в том, что define никогда не может быть вызвано.

Пока существует только один define для каждого файла, он будет регистрировать этот модуль как доступный под этим именем файла. Тем не менее, модули define загружаются только после того, как функция require запрашивает каждую из них.

Определите: если вам нужно XXX, сначала загрузите эти другие вещи, а затем верните результат этой функции.

Требовать: загрузить эти другие вещи, а затем запустить эту функцию. (нет "если" )

Пример. Предположим, вы включили этот JS файл на свою страницу:

// this is in company/welcomepage.js
define(['company/ui_library'],
    function(uiLib) {
        console.log('Welcome to {company}!');
    }
);

Если это единственный файл Javascript, вы можете открыть свою страницу, и в журнале консоли ничего не будет, несмотря на то, что script сообщит об этом, чтобы приветствовать пользователя. Однако это изменяется, если где-то на странице или в другом script, вы вставляете следующее:

require(['company/welcomepage'], function() {
    // optionally insert some other page-initialization logic here
});

Теперь страница будет помещать приветственное сообщение в консоль при загрузке.

Фактически, с этой второй на месте, не было бы необходимости вручную включать welcomepage.js в качестве тега <script>; он будет загружать его из своего местоположения, как только он увидит требуемое, и осознает, что ему это нужно.

Ответ 2

require и requirejs совпадают.

require === requirejs // true

require - способ загрузки модуля, который был определен. Например, чтобы загрузить модуль logger, я мог бы сделать:

require(["logger"], function(logger){
  logger.bla("S");
});

Здесь я вызываю require, задавая уже определенный модуль под названием logger и используя его, вызывая его метод bla.

define - это способ определения модуля. Например, чтобы определить модуль logger, который я мог бы сделать:

// logger.js
define(function(){
  return {
    bla: function(x){
      alert(x);
    }
  }
});

Здесь я назвал define и определил модуль logger. в этом модуле я вернул функцию bla, которую хочу открыть.

Иногда определение выглядит очень похоже на экспорт, потому что определение также может зависеть и использовать другие модули так же, как и требовать, могут использовать другие модули. Позвольте мне показать вам тот же модуль logger, на этот раз используя модуль

// logger.js
define(["popup"], function(popup){
  return {
    bla: function(x){
      popup.show(x);
    }
  }
});

Здесь модуль logger я defined также имеет зависимость, называемую popup и, следовательно, она выглядит как require.

Ответ 3

Я считаю, что вы всегда используете определение для своих определений модулей. У вас есть несколько вариантов для этого, вы можете определить модуль со своими зависимостями в массиве в качестве первого аргумента для определения (как в примере, который вы опубликовали).

Или вы можете использовать упрощенную оболочку CommonJS, что-то вроде этого:

define(function (require) {
    var otherModule = require('otherModule');
    return function () {
        return otherModule.operation();
    };
});

Возможно, вы перепутались с форматом зависимости JSONP, который использует require() для загрузки службы, а затем укажите define() как ответный вызов JSONP, который в конечном итоге определит модуль после ответа службы.

Итак, в конце вы используете define() для определения модулей и require() для их загрузки.

Ответ 4

define - это то, как мы объявляем модуль в соответствии с форматом модуля AMD (имеются другие доступные форматы модулей, такие как CommonJS, ES2015, System.register, UMD)

тогда как

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

Ответ 5

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

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

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