RequireJS: Unterschied zwischen den Funktionen "requirejs" und "require"

80

Ich benutze requireJS 2.x. Ich fand heraus, dass einige Tutorials (und die offiziellen Dokumente) manchmal verwenden

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

und manchmal

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

Gibt es einen Unterschied zwischen diesen beiden Funktionen (require und requirejs)? Ich konnte kein Wort darüber in den Dokumenten finden. :(

Matthias Bayer
quelle

Antworten:

86

Sie sind genau das gleiche.

Der Grund dafür ist, dass einige Umgebungen möglicherweise bereits eine requirehaben. In diesem Fall überschreibt RequireJS diese nicht und ermöglicht die Verwendung der Bibliothek durchrequirejs

Siehe dieses Commit - https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39

Simon Smith
quelle
15
Danke :) Das sollte in den Dokumenten vermerkt werden. Die Kommentare im Code machen dies nicht deutlich.
Matthias Bayer
Ich stimme zu, es ist verwirrend (und selbst die "offizielle" Requirement-Seite weist Inkonsistenzen zwischen der Verwendung und den Beispielen auf). Gut zu wissen, dass sie ein und dasselbe sind.
Bil Simser
Die Verwendung von CommonJS im Browser (über Webpack oder browserify) bedeutet, dass Sie auch darauf zugreifen können, requirejsda dies requirein dieser Situation bereits eine lokale Variable ist. Ich fand dies nützlich in React-Komponenten, um zusätzliche Skripte in zu laden componentDidMount.
Simon Smith
1
Gute Bibliothek, verwirrende Dokumentation. Auch der Abschnitt "API" ist nicht die API, sondern eher ein "Kochbuch". Es gibt viele Tutorials, die besser für den Einstieg geeignet sind als die offiziellen Dokumente.
Hal50000
20

Sind requirejsund requiredas gleiche?

Ab RequireJS 2.1.15 requireund requirejsim globalen Raum sind in der Tat "genau die gleichen", wie aus diesem Test hervorgeht, den Sie in der Konsole durchführen können:

> require === requirejs
true

Dass der Test zurückgibt, truesagt Ihnen, dass es sich um genau dasselbe Funktionsobjekt handelt . Es sind keine zwei Funktionen, die einen ähnlichen oder identischen Code haben. Sie sind das gleiche Objekt, Punkt.

Beachten Sie jedoch , wenn Sie ausführen , define(['require'], function (require) {die requirean die Funktion übergeben wird , ist normalerweise verschieden von der globalen require.

Sollten Sie verwenden requireoder requirejs?

Es hängt davon ab, ob. RequireJS ist ein AMD-Lader, aber nicht der einzige Lader in der Stadt. Wenn Sie Code schreiben möchten, der zu 100% der AMD-Spezifikation entspricht , damit jemand, der Ihren Code verwendet, jeden gewünschten Loader verwenden kann, ohne Ihren Code ändern zu müssen, sollten Sie ihn requireauf globaler Ebene verwenden, da er requirejsspezifisch für RequireJS ist. Ein anderer AMD-Lader definiert es nicht. Die AMD-Spezifikation definiert requireaber nicht requirejs.

Wenn Sie etwas anderes laden, das eine globale Ebene definiert require, müssen Sie diese auf requirejsglobaler Ebene verwenden, um Konflikte zu vermeiden.

Verwenden Sie definein einem Modul immer , um einen Verweis auf zu erhalten require. Sie sollten dies ganz unabhängig davon tun, ob es einen Konflikt im globalen Raum gibt.

Louis
quelle
2

OK, sie können tatsächlich "genau gleich" sein. Konzentrieren wir uns dann darauf, warum Sie eines gegen das andere verwenden würden ...

Unklar ist, was als "Best Practice" zu betrachten ist: Wenn requirejs zusätzliche Sicherheit bietet, "wenn in einigen Umgebungen möglicherweise bereits eine Anforderung besteht", wäre es nicht eine gute Idee, immer die Funktion requirejs zu verwenden, um eine erforderliche Konfiguration zu definieren als die erfordern Funktion?

Was passiert auch, wenn das Undenkbare passiert und in der fraglichen Umgebung nicht nur bereits ein "Erfordernis" definiert ist, sondern auch ein "Erfordernis" definiert ist? Bedeutet das, dass wir auch eine Anforderung haben sollten? Und so weiter...?

Jazimov
quelle
1
Technisch gibt es das gleiche wie $und jQuery. Es geht nur darum, einen Fallback zu bieten und ein guter Bürger zu sein, falls eine Umgebung bereits genutzt wird require. Es ist sehr viel ein Randfall und es wird empfohlen, zu verwenden require, aber nicht notwendig - github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables-
Simon Smith
0

Sie sind Same Open Website, die bereits geladen benötigen

Öffnen Sie dann die Chrome-Konsole

Geben Sie require in die Konsole ein und drücken Sie die Eingabetaste

Geben Sie requirejs in die Konsole ein und drücken Sie die Eingabetaste

Sie können feststellen, dass es sich um dieselbe Funktion mit unterschiedlichen Namen handelt

JeevanReddy Avanaganti
quelle