Um noch einmal zu sagen, was meiner Meinung nach die Frage des OP wirklich ist:
Wenn ich eine Anwendung hauptsächlich in Angular 1.x erstelle und dies (implizit) im Zeitalter von Grunt / Gulp / Broccoli und Bower / NPM tue und möglicherweise einige zusätzliche Bibliotheksabhängigkeiten habe, muss Require klar und spezifisch sein Wert über das hinaus, was ich durch die Verwendung von Angular ohne Anforderung erhalte?
Oder anders ausgedrückt:
"Muss Vanilla Angular das grundlegende Laden von Angular-Komponenten effektiv verwalten, wenn ich andere Möglichkeiten habe, das grundlegende Laden von Skripten zu handhaben? "
Und ich glaube, die grundlegende Antwort darauf lautet: "Es sei denn, Sie haben etwas anderes im Gange und / oder können keine neueren, moderneren Tools verwenden."
Lassen Sie uns gleich zu Beginn klar sein: RequireJS ist ein großartiges Tool, das einige sehr wichtige Probleme gelöst und uns auf den Weg zu skalierbareren, professionelleren Javascript-Anwendungen gebracht hat. Wichtig ist, dass es das erste Mal war, dass viele Menschen auf das Konzept der Modularisierung und des Ausstiegs aus dem globalen Geltungsbereich stießen. Wenn Sie also eine Javascript-Anwendung erstellen möchten, die skaliert werden muss, sind Require und das AMD-Muster keine schlechten Werkzeuge dafür.
Aber gibt es etwas Besonderes an Angular, das Require / AMD besonders gut passt? Nein. Angular bietet Ihnen ein eigenes Modularisierungs- und Kapselungsmuster, das die grundlegenden Modularisierungsfunktionen von AMD in vielerlei Hinsicht überflüssig macht. Die Integration von Angular-Modulen in das AMD-Muster ist nicht unmöglich, aber ein bisschen ... pingelig. Sie werden auf jeden Fall Zeit damit verbringen, die beiden Muster gut zu integrieren.
Für eine Perspektive aus dem Angular-Team selbst gibt es diese von Brian Ford, Autor des Angular Batarang und jetzt Mitglied des Angular-Kernteams:
Ich empfehle nicht, RequireJS mit AngularJS zu verwenden. Obwohl es sicherlich möglich ist, habe ich keinen Fall gesehen, in dem RequireJS in der Praxis von Vorteil war.
Zur sehr spezifischen Frage von AngularJS: Angular und Require / AMD sind orthogonal und stellenweise überlappend. Sie können sie zusammen verwenden, aber es gibt keinen Grund, der speziell mit der Natur / den Mustern von Angular selbst zusammenhängt.
Aber was ist mit der grundlegenden Verwaltung interner und externer Abhängigkeiten für skalierbare Javascript-Anwendungen? Muss Require dort nicht etwas wirklich Kritisches für mich tun?
Ich empfehle Bower und NPM und insbesondere NPM. Ich versuche nicht, einen heiligen Krieg über die komparativen Vorteile dieser Werkzeuge zu beginnen. Ich möchte nur sagen: Es gibt andere Möglichkeiten, diese Katze zu häuten, und diese Möglichkeiten sind möglicherweise sogar besser als AMD / Require. (Sie haben Ende 2015 sicherlich eine viel populärere Dynamik, insbesondere NPM, kombiniert mit ES6- oder CommonJS-Modulen. Siehe verwandte SO-Frage .)
Was ist mit Lazy-Loading?
Beachten Sie, dass das verzögerte Laden und das verzögerte Herunterladen unterschiedlich sind. Angulars verzögertes Laden bedeutet nicht, dass Sie sie direkt vom Server abrufen. In einer Anwendung im Yeoman-Stil mit Javascript-Automatisierung verketten und minimieren Sie den gesamten Shebang in einer einzigen Datei. Sie sind vorhanden, werden aber erst ausgeführt / instanziiert, wenn sie benötigt werden. Die Geschwindigkeits- und Bandbreitenverbesserungen, die Sie dadurch erzielen, überwiegen bei weitem alle angeblichen Verbesserungen, die durch das verzögerte Herunterladen eines bestimmten 20-Zeilen-Controllers entstehen. Tatsächlich wird die verschwendete Netzwerklatenz und der Übertragungsaufwand für diesen Controller eine Größenordnung größer sein als die Größe des Controllers selbst.
Angenommen, Sie müssen wirklich faul herunterladen, möglicherweise für selten verwendete Teile Ihrer Anwendung, z. B. eine Administrationsoberfläche. Das ist ein sehr legitimer Fall. Require kann das in der Tat für Sie tun. Aber es gibt auch viele andere , möglicherweise mehr flexible Optionen , die das Gleiche erreichen. Und Angular 2.0 wird sich anscheinend darum kümmern, in den Router integriert . ( Details .)
Aber was ist mit der Entwicklung auf meiner lokalen Entwicklerbox?
Wie kann ich alle meine Dutzende / Hunderte von Skriptdateien laden, ohne sie alle manuell an index.html anhängen zu müssen?
Schauen Sie sich die Untergeneratoren in Yeomans Generator-Winkel an, oder die Automatisierungsmuster, die in Generator-Schluck-Winkel enthalten sind , oder die Standard-Webpack-Automatisierung für React. Diese bieten Ihnen eine saubere, skalierbare Möglichkeit, entweder die Dateien zum Zeitpunkt des Gerüstbaus automatisch anzuhängen oder sie alle automatisch abzurufen, wenn sie in bestimmten Ordnern vorhanden sind / bestimmten Glob-Mustern entsprechen. Sie müssen nie wieder über das Laden von Skripten nachdenken, wenn Sie die letzteren Optionen haben.
Endeffekt?
Require ist für bestimmte Dinge ein großartiges Werkzeug. Aber gehen Sie mit dem Getreide, wann immer es möglich ist, und trennen Sie Ihre Bedenken, wann immer dies möglich ist. Lassen Sie Angular sich Gedanken über Angulars eigenes Modularisierungsmuster machen und erwägen Sie, ES6-Module oder CommonJS als allgemeines Modularisierungsmuster zu verwenden. Lassen Sie moderne Automatisierungstools sich um das Laden von Skripten und das Abhängigkeitsmanagement kümmern. Und kümmern Sie sich um das asynchrone Faul-Laden auf granulare Weise, anstatt es mit den beiden anderen Anliegen zu verwechseln.
Wenn Sie jedoch Angular-Apps entwickeln, Node jedoch aus irgendeinem Grund nicht auf Ihrem Computer installieren können, um Javascript-Automatisierungstools zu verwenden, ist Require möglicherweise eine gute alternative Lösung. Und ich habe wirklich aufwändige Setups gesehen, bei denen Leute Angular-Komponenten dynamisch laden möchten, die jeweils ihre eigenen Abhängigkeiten deklarieren oder so. Und während ich wahrscheinlich versuchen würde, dieses Problem auf andere Weise zu lösen, kann ich die Vorzüge der Idee für diese ganz besondere Situation erkennen.
Aber ansonsten ... wenn Sie mit einer neuen Angular-Anwendung und der Flexibilität beginnen, eine moderne Automatisierungsumgebung zu erstellen, haben Sie viele andere, flexiblere und modernere Optionen.
(Wird wiederholt aktualisiert, um mit der sich entwickelnden JS-Szene Schritt zu halten.)