Ich möchte requireJS verwenden und verwende jQuery. Ich möchte die kombinierte Version von requireJS und jQuery nicht verwenden, da ich nicht die neueste jQuery-Version verwende. Was ist der beste Weg für mich, mit requireJS zu arbeiten?
82
Antworten:
Das ist auch meine genaue Frage! Ich muss auch eine ältere jQuery verwenden, aber auch "traditionellere" Javascript-Bibliotheken. Was ist die beste Technik, um das zu tun? (Ich kann Ihre Frage bearbeiten, um sie breiter zu gestalten, wenn Sie nichts dagegen haben.) Folgendes habe ich gelernt.
Der RequireJS-Autor James Burke erläuterte die Vorteile der kombinierten RequireJS + jQuery-Datei . Sie bekommen zwei Dinge.
Ein Modul
jquery
ist verfügbar und es ist das jQuery-Objekt. Das ist sicher:jQuery ist bereits vor jedem geladen
require()
oderdefine()
Sachen. Allen Modulen wird garantiert, dass jQuery bereit ist. Sie brauchen nicht einmal dasrequire/order.js
Plugin, da jQuery grundsätzlich hartcodiert war, um zuerst geladen zu werden.Für mich ist # 2 nicht sehr hilfreich. Die meisten realen Anwendungen haben viele
.js
Dateien, die in der richtigen Reihenfolge geladen werden müssen - traurig, aber wahr. Sobald Sie Sammy oder Underscore.js benötigen, hilft die kombinierte RequireJS + jQuery-Datei nicht mehr.Meine Lösung besteht darin, einfache RequireJS-Wrapper zu schreiben, die meine traditionellen Skripte mit dem Plugin "order" laden.
Beispiel
Angenommen, meine App verfügt über diese Komponenten (abhängig).
In meinen Augen ist alles darüber
.js
ein "traditionelles" Skript. Alles ohne.js
ist ein RequireJS-Plugin. Der Schlüssel ist: High-Level-Inhalte (greatapp, my_sammy) sind Module, und auf tieferen Ebenen wird auf herkömmliche.js
Dateien zurückgegriffen.Booten
Alles beginnt mit einem Booter, der RequireJS sagt, wie er anfangen soll.
In habe
js/boot.js
ich nur die Konfiguration und wie man die Anwendung startet.Hauptanwendung
In habe
greatapp.js
ich ein normal aussehendes Modul.RequireJS-Modul-Wrapper für herkömmliche Dateien
require_jquery.js
::require_sammy.js
::quelle
Diese Frage ist jetzt mindestens zwei Jahre alt, aber ich habe festgestellt, dass dies immer noch ein Problem mit RequireJS 2.0 ist (require-jquery.js verwendet jQuery 1.8.0, aber die neueste Version ist 1.8.2).
Wenn Sie diese Frage sehen, beachten Sie, dass require-jquery.js jetzt nur require.js und jquery.js sind, die zusammengefügt wurden. Sie können einfach require-jquery.js bearbeiten und die jQuery-Teile durch eine neuere Version ersetzen .
Update (30. Mai 2013) : Nachdem RequireJS über Pfade und Shim verfügt, gibt es eine neue Möglichkeit, jQuery- und jQuery-Plugins zu importieren, und die alte Methode ist weder erforderlich noch empfohlen . Hier ist eine gekürzte Version der aktuellen Methode:
Weitere Informationen finden Sie unter http://requirejs.org/docs/jquery.html .
quelle
Ich habe festgestellt, dass der beste Ansatz darin besteht, jQuery außerhalb meines RequireJS-Builds zu halten.
Fügen Sie einfach jquery.min.js in Ihr HTML ein. Dann erstellen Sie eine jquery.js-Datei mit so etwas ...
quelle
Ich fand JasonSmiths Antwort enorm hilfreich, wahrscheinlich mehr als die Dokumentation von RequireJS.
Es gibt jedoch eine Möglichkeit zur Optimierung, um zu vermeiden, dass separate AJAX-Anforderungen für (winzige) Module zum Definieren von Definitionen ("require_jquery" "require_sammy") vorliegen. Ich würde vermuten, dass r.js dies in der Optimierungsphase tun würde, aber Sie können dies im Voraus tun, um nicht mit Path, BaseURI-System zu kämpfen.
index.html:
loader.js:
Schließlich myapplication.js:
Diese Struktur (ersetzt lose (Duplikate?) Das Order Plugin von RequireJS, aber) ermöglicht es Ihnen, die Anzahl der Dateien, die Sie für AJAX benötigen, zu reduzieren und der Definition von abhängigen und abhängigen Bäumen mehr Kontrolle zu verleihen.
Es gibt auch einen großen Vorteil, jQuery separat zu laden (normalerweise 100.000). Sie können das Caching auf dem Server steuern oder jQuery im localStorage des Browsers zwischenspeichern. Schauen Sie sich das AMD-Cache-Projekt hier an: https://github.com/jensarps/AMD-cache. Ändern Sie dann die Definition (Anweisungen, die "Cache!" Einschließen:) und sie bleibt (für immer :) im Browser des Benutzers hängen.
Hinweis zu jQuery 1.7.x + Es hängt sich nicht mehr an das Fensterobjekt an, daher funktioniert das oben Gesagte NICHT mit der unveränderten jQuery 1.7.x + -Datei. Dort müssen Sie Ihre jquery **. Js anpassen, um dies vor dem Schließen von "}) (window);" einzuschließen:
Wenn in der Konsole "jQuery undefined" -Fehler vorliegen, handelt es sich um ein Zeichen, das die von Ihnen verwendete jQuery-Version nicht an das Fenster anfügt.
Codelizenz: Public Domain.
Angaben: JavaScript oben riecht nach "Pseudocode", da es sich um eine Paraphrasierung (manuelles Beschneiden) von viel detaillierterem Produktionscode handelt. Es ist nicht garantiert, dass der oben dargestellte Code funktioniert, und er wurde NICHT getestet, um wie dargestellt zu funktionieren. Audit, teste es. Semikolons wurden absichtlich weggelassen, da sie gemäß JS-Spezifikation nicht erforderlich sind und Code ohne sie besser aussieht.
quelle
Zusätzlich zur Antwort von jhs finden Sie die neueren Anweisungen auf der Github-Seite require-jquery in der Datei README.md. Es behandelt sowohl den einfachsten Ansatz der Verwendung einer kombinierten Datei jquery / require.js als auch die Verwendung einer separaten Datei jquery.js.
quelle