RequireJS lädt immer Module asynchron, aber es eine Form von require
, die synchron aussieht ermöglichen. In Ihrem zweiten Snippet fehlt tatsächlich ein wirklich wichtiger Code. (Der Modulname für jQuery ist auch fest mit jquery
codiert. Sie könnten eine Konfiguration schreiben, die Ihnen erlaubt, sie als jQuery
zu bezeichnen, aber das hat keinen Sinn.) Diese Form der Aufrufe require
ist so konzipiert, dass sie innerhalb von Modulen verwendet werden kann:
define(function (require) {
var $ = require("jquery");
$.doSomething();
});
Was RequireJS mit dem Code tut oben ist es in diese Transformation vor der Ausführung:
define(['jquery'], function (require) {
var $ = require("jquery");
$.doSomething();
});
Hinweis die Zugabe der Abhängigkeit als erstes Argument von define
. Wenn RequireJS den Code ausführt, sucht er die Abhängigkeit, lädt jquery
und ruft dann die anonyme Funktion auf. Wenn require("jquery")
gefunden wird, ist das Modul bereits geladen. Am Ende des Tages, während der require
Anruf sieht synchron, das Laden des Moduls, das es erfordert, geschieht immer noch asynchron.
Können Sie dieses synchrone Formular require
außerhalb eines define
Anrufs verwenden? Nur wenn Sie mit Fehlern einverstanden sind. Dieser Aufruf schlägt fehl, wenn das Modul nicht bereits geladen wurde. Sie die berüchtigte Fehlermeldung erhalten:
Module name ... has not been loaded yet for context: ...
es in einem define
Verwendung, wie ich oben gezeigt habe, ist sicher.Oder ich denke, man könnte tun:
require(['jquery'], function (require) {
var $ = require("jquery");
$.doSomething();
});
die würde Arbeit, aber was ist der Sinn von manuell die Abhängigkeit zu wiederholen. (Falls Sie sich wundern, RequireJS nicht einen require
Ruf mit einem Rückruf-Transformation, wie ich sie in meinem Beispiel haben hier in der gleichen Art und Weise es einen define
Anruf verwandelt, wie ich habe oben gezeigt.)
Ihnen danken. jetzt ist alles klar, der Code sieht ein bisschen schöner und sauberer in der zweiten Art aus, wie ich es sehe. :) – Er85