RequireJS: Різниця між функціями “requirejs” та “require”


80

Я використовую requireJS 2.x. Я довідався, що деякі підручники (та офіційні документи) іноді використовують

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

а іноді

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

Чи є якась різниця між цими двома функціями (require та requirejs)? Я не міг знайти жодного слова про це в документах. :(

Відповіді:


86

Вони абсолютно однакові.

Причиною є те, що деякі середовища вже можуть мати a require, і в цьому випадку RequireJS не перезаписує його і дозволяє використовувати бібліотеку черезrequirejs

Подивіться це коміт - https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39


15
Дякую :) Це слід зазначити у документах. Коментарі в коді цього не дають зрозуміти.
Маттіас Байєр

Я погоджуюсь, це бентежить (і навіть "офіційна" сторінка requirejs має невідповідність між використанням та прикладами). Добре знати, що вони одне і те ж.
Bil Simser

Використання CommonJS у браузері (через webpack або browserify) означає, що ви також можете отримати доступ, requirejsоскільки requireце вже є локальною змінною в ситуації tht. Я знайшов це корисним у компонентах 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 надає додаткове запевнення, "якщо деякі середовища вже можуть мати require", то чи не було б гарною ідеєю завжди використовувати функцію requirejs для визначення конфігурації require, а чим потрібна функція?

Крім того, що трапляється, якщо трапляється немислиме, а навколишнє середовище не тільки вже має визначене "вимагати", але й має визначене "вимагай"? Чи означає це, що ми теж повинні мати Requijsjs? І так далі...?


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

0

Це Той самий відкритий веб-сайт, який завантажений вимагає вже

потім відкрийте консоль Chrome

введіть require у консолі та натисніть клавішу enter

введіть requirejs у консолі та натисніть клавішу enter

ви можете виявити, що це однакові функції з різними іменами

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.