RequireJS: разница между функциями requirejs и require

80

Я использую requireJS 2.x. Я обнаружил, что некоторые учебники (и официальные документы) иногда используют

requirejs.config({ [...] });
requirejs(["module"]) ...

и иногда

require.config({ [...] });
require(["module"]) ...

Есть ли разница между этими двумя функциями (require и requirejs)? Я не нашел ни слова об этом в документации. :(

Маттиас Байер
источник

Ответы:

86

Они точно такие же.

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

См. Этот коммит - https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39

Саймон Смит
источник
15
Спасибо :) Это нужно отметить в документации. Комментарии в коде не проясняют это.
Маттиас Байер
Я согласен, это сбивает с толку (и даже на «официальной» странице requirejs есть несоответствия между использованием и примерами). Приятно знать, что они одно и то же.
Бил Симсер
Использование CommonJS в браузере (через webpack или browserify) означает, что вы также можете получить доступ, requirejsпоскольку requireэто уже локальная переменная в этой ситуации. Я нашел это полезным в компонентах React для загрузки дополнительных скриптов componentDidMount.
Саймон Смит,
1
Хорошая библиотека, запутанная документация. Даже раздел «API» - это не API, а скорее «поваренная книга». Существует множество руководств, с которых лучше начать работу, чем с официальных документов.
Hal50000
20

Есть requirejsи requireтом же уровне ?

Начиная с RequireJS 2.1.15, requireи requirejsв глобальном пространстве они действительно «точно такие же», о чем свидетельствует этот тест, который вы можете выполнить в консоли:

> require === requirejs
true

То, что тест возвращает, trueговорит вам, что это один и тот же функциональный объект . Это не две функции, которые имеют похожий или идентичный код. Это один и тот же объект, точка.

Обратите внимание, однако при выполнении передается функции , как правило , отличается от глобальногоdefine(['require'], function (require) {requirerequire .

Следует ли использовать requireили requirejs?

Это зависит. RequireJS - это загрузчик AMD, но это не единственный загрузчик в городе. Если вы хотите написать код, который на 100% соответствует спецификации AMD , чтобы кто-то, использующий ваш код, мог использовать любой загрузчик, который им нужен, без необходимости изменять ваш код, вы должны использовать его requireна глобальном уровне, поскольку это requirejsотносится к RequireJS. Другой загрузчик AMD этого не определит. Спецификация AMD определяет, requireно нет requirejs.

Если вы загружаете что-то еще, что определяет глобальное значение, requireвы должны использовать его requirejsна глобальном уровне, чтобы избежать конфликта.

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

Луи
источник
2

Хорошо, они действительно могут быть «точно такими же». Затем давайте сосредоточимся на том, почему вы должны использовать одно против другого ...

Что неясно, так это то, что следует считать «лучшей практикой»: если requirejs обеспечивает дополнительную уверенность, «если в некоторых средах уже может быть требование», то было бы лучше всегда использовать функцию requirejs для определения требуемой конфигурации. чем требуется функция?

Кроме того, что произойдет, если произойдет немыслимое, и в рассматриваемой среде не только уже определено «require», но также определено «requirejs»? Означает ли это, что у нас тоже должен быть requirejsjs? И так далее...?

Джазимов
источник
1
Технически они такие же, как $и jQueryесть. Просто чтобы обеспечить запасной вариант и быть хорошим гражданином в случае, если среда уже используется require. Это очень крайний случай, и его рекомендуется использовать require, но не обязательно - github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables-
Саймон Смит
0

Это тот же открытый веб-сайт, который уже загружен.

затем откройте консоль Chrome

введите требование в консоли и нажмите ввод

введите requirejs в консоли и нажмите ввод

вы можете обнаружить, что это одна и та же функция с разными именами

ДживанРедди Аванаганти
источник