Когда я должен использовать require () и когда использовать define ()? - PullRequest
309 голосов
/ 01 марта 2012

Последние несколько дней я играюсь с requirejs. Я пытаюсь понять разницу между определением и требованием.

Кажется, что определение позволяет разделять модули и позволяет соблюдать порядок следования зависимостей. Но он загружает все файлы, которые ему нужны для начала. Хотя требуется загружать только то, что вам нужно, когда вам это нужно.

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

Ответы [ 4 ]

326 голосов
/ 12 июня 2012

Из исходного файла 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() принимает два необязательных параметра (строку, которая представляетидентификатор модуля и массив необходимых модулей) и один обязательный параметр (фабричный метод).

Возвращение фабричного метода MUST возвращает реализацию для вашего модуля (таким же образом*

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

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

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

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

324 голосов
/ 01 марта 2012

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

Мое эмпирическое правило:

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

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

2 голосов
/ 09 октября 2016

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

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

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

2 голосов
/ 21 марта 2016

метод define для упрощения определения модуля и метод require для обработки загрузки зависимостей

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

define(
module_id /*optional*/, 
[dependencies] /*optional*/, 
definition function /*function for instantiating the module or object*/
);
С другой стороны,

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

Обратитесь к https://addyosmani.com/writing-modular-js/ для получения дополнительной информации.

...