RequireJS: Różnica między funkcjami „requirejs” i „require”

80

Używam requireJS 2.x. Dowiedziałem się, że niektóre samouczki (i oficjalne dokumenty) czasami używają

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

i czasami

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

Czy jest jakaś różnica między tymi dwiema funkcjami (require i requirejs)? Nie mogłem znaleźć żadnego słowa na ten temat w dokumentacji. :(

Matthias Bayer
źródło

Odpowiedzi:

86

Są dokładnie takie same.

Powodem jest to, że niektóre środowiska mogą już mieć requirerozszerzenie, w którym to przypadku RequireJS nie nadpisuje go i zezwala na użycie biblioteki poprzezrequirejs

Zobacz to zobowiązanie - https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39

Simon Smith
źródło
15
Dzięki :) To powinno być odnotowane w dokumentach. Komentarze w kodzie nie wyjaśniają tego jasno.
Matthias Bayer
Zgadzam się, jest to mylące (i nawet „oficjalna” strona requirejs zawiera niespójności między użyciem a przykładami). Dobrze wiedzieć, że są jednym.
Bil Simser
Używanie CommonJS w przeglądarce (poprzez webpack lub browserify) oznacza, że ​​możesz również uzyskać dostęp, requirejsponieważ requirejest to już zmienna lokalna w tej sytuacji. Znalazłem to przydatne w komponentach React, aby załadować dodatkowe skrypty w componentDidMount.
Simon Smith
1
Dobra biblioteka, zagmatwana dokumentacja. Nawet sekcja „API” to nie API, ale raczej „książka kucharska”. Istnieje wiele samouczków, od których lepiej zacząć niż oficjalne dokumenty.
Hal50000
20

Czy requirejsi requireto samo?

Począwszy od RequireJS 2.1.15 requireiw requirejsprzestrzeni globalnej są rzeczywiście „dokładnie takie same”, co może wykazać ten test, który można wykonać w konsoli:

> require === requirejs
true

To, że test zwraca, oznacza true, że są to dokładnie ten sam obiekt funkcji . Nie są to dwie funkcje, które mają podobny lub identyczny kod. To ten sam obiekt, kropka.

Należy jednak zwrócić uwagę podczas wykonywania przekazany do funkcji jest zwykle różny od globalnego .define(['require'], function (require) {requirerequire

Należy użyć requirelub requirejs?

To zależy. RequireJS to program ładujący AMD, ale nie jest to jedyny program ładujący w mieście. Jeśli chcesz napisać kod, który jest w 100% zgodny ze specyfikacją AMD , aby ktoś korzystający z Twojego kodu mógł używać dowolnego programu ładującego bez konieczności modyfikowania kodu, powinieneś używać go requirena poziomie globalnym, ponieważ requirejsjest on specyficzny dla RequireJS. Inny program ładujący AMD tego nie zdefiniuje. Specyfikacja AMD definiuje, requireale nie requirejs.

Jeśli ładujesz coś innego, co definiuje globalny require, musisz użyć requirejsna poziomie globalnym, aby uniknąć konfliktu.

Wewnątrz modułu zawsze używaj, defineaby uzyskać odwołanie do require. Powinieneś to zrobić niezależnie od tego, czy istnieje konflikt w globalnej przestrzeni.

Louis
źródło
2

OK, rzeczywiście mogą być „dokładnie takie same”. Skoncentrujmy się więc na tym, dlaczego miałbyś używać jednego w porównaniu z drugim ...

Nie jest jasne, co należy uznać za „najlepszą praktykę”: jeśli requirejs zapewnia dodatkową pewność, „jeśli niektóre środowiska mogą już mieć wymagania”, to czy nie byłoby dobrym pomysłem zawsze używać funkcji requirejs do definiowania wymaganej konfiguracji. niż wymagana funkcja?

Co się stanie, jeśli wydarzy się to, co nie do pomyślenia, a dane środowisko nie tylko ma już zdefiniowane „wymaganie”, ale także ma zdefiniowane „wymagania”? Czy to oznacza, że ​​powinniśmy mieć również requirejsjs? I tak dalej...?

Jazimov
źródło
1
Technicznie są takie same, jak $i jQuerysą. Ma to na celu zapewnienie rezerwy i bycie dobrym obywatelem na wypadek, gdyby środowisko już korzystało require. To bardzo ostry przypadek i zaleca się go używać require, ale nie jest to konieczne - github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables-
Simon Smith
0

Są to ta sama otwarta witryna, która już została załadowana

następnie otwórz konsolę Chrome

wpisz require w konsoli i naciśnij enter

wpisz requirejs w konsoli i naciśnij enter

można zauważyć, że są to te same funkcje i mają różne nazwy

JeevanReddy Avanaganti
źródło