Ich wollte eine einfache Hallo-Welt-App für Angular starten.
Als ich den Anweisungen im offiziellen Schnellstart folgte, erstellte die Installation 32.000 Dateien in meinem Projekt.
Ich dachte, dies sei ein Fehler oder ich habe etwas verpasst, also entschied ich mich für Angular-Cli , aber nach dem Einrichten des Projekts zählte ich 41.000 Dateien.
Was habe ich falsch gemacht? Vermisse ich etwas wirklich wirklich Offensichtliches?
javascript
angular
Moshe Shaham
quelle
quelle
Antworten:
An Ihrer Konfiguration ist nichts auszusetzen.
Angular (seit Version 2.0) verwendet npm-Module und Abhängigkeiten für die Entwicklung. Das ist der einzige Grund, warum Sie so viele Dateien sehen.
Eine Grundeinstellung von Angular enthält Transpiler-Typisierungsabhängigkeiten, die nur für Entwicklungszwecke wesentlich sind .
Sobald Sie mit der Entwicklung fertig sind, müssen Sie nur noch diese Anwendung bündeln.
Nach dem Bündeln Ihrer Anwendung gibt es nur eine
bundle.js
Datei, die Sie dann auf Ihrem Server bereitstellen können.'transpiler' ist nur ein Compiler, danke @omninonsense für das Hinzufügen.
quelle
NPM-Paketdateien (Entwicklung) Dateien aus der realen Welt (Bereitstellung)
*
::bundled with @angular
[ Informationen zum Bündelungsprozess finden Sie hier ⇗ ]
quelle
-3
, wir wurden dafür gegeben, dass wir die Summe nicht gemacht haben, aber jetzt habe ich :)An Ihrer Entwicklungskonfiguration ist nichts auszusetzen .
Mit Ihrer Produktionskonfiguration stimmt etwas nicht .
Wenn Sie ein "Angular 2-Projekt" oder "Jedes auf JS basierende Projekt" entwickeln, können Sie alle Dateien verwenden, Sie können alle Dateien ausprobieren, Sie können alle Dateien importieren. Wenn Sie dieses Projekt jedoch bedienen möchten, müssen Sie alle strukturierten Dateien KOMBINIEREN und nutzlose Dateien entfernen .
Es gibt viele Möglichkeiten, diese Dateien miteinander zu kombinieren:
quelle
Wie bereits von mehreren Personen erwähnt: Alle Dateien in Ihrem Verzeichnis node_modules (NPM-Speicherort für Pakete) sind Teil Ihrer Projektabhängigkeiten (sogenannte direkte Abhängigkeiten). Darüber hinaus können Ihre Abhängigkeiten auch eigene Abhängigkeiten usw. haben (sogenannte transitive Abhängigkeiten). Mehrere zehntausend Dateien sind nichts Besonderes.
Da Sie nur 10'000 Dateien hochladen dürfen (siehe Kommentare), würde ich mich für eine Bundler-Engine entscheiden. Diese Engine bündelt Ihr gesamtes JavaScript, CSS, HTML usw. und erstellt ein einzelnes Bundle (oder mehr, wenn Sie diese angeben). Ihre index.html lädt dieses Bundle und das wars.
Ich bin ein Fan von Webpack, daher erstellt meine Webpack-Lösung ein Anwendungspaket und ein Anbieterpaket (Die voll funktionsfähige Anwendung finden Sie hier https://github.com/swaechter/project-collection/tree/master/web-angular2- Beispiel ):
index.html
webpack.config.js
Vorteile:
Nachteile:
Haftungsausschluss: Dies ist eine gute Lösung für HTTP 1. *, da dadurch der Overhead für jede HTTP-Anforderung minimiert wird. Sie haben nur eine Anfrage für Ihre index.html und jedes Bundle - nicht jedoch für 100 - 200 Dateien. Im Moment ist dies der richtige Weg.
Http 2 hingegen versucht, den Http-Overhead zu minimieren, sodass es auf einem Stream-Protokoll basiert. Dieser Stream kann in beide Richtungen kommunizieren (Client <-> Server). Aus diesem Grund ist ein intelligenteres Laden von Ressourcen möglich (Sie laden nur die erforderlichen Dateien). Der Stream eliminiert einen Großteil des HTTP-Overheads (weniger HTTP-Roundtrips).
Aber es ist das gleiche wie bei IPv6: Es wird einige Jahre dauern, bis die Leute wirklich HTTP 2 verwenden
quelle
angular-cli
bereits einen Bundler enthält (das gleiche empfohlene Webpack).Sie müssen sicherstellen, dass Sie nur den Ordner dist (kurz für verteilbar) aus Ihrem Projekt bereitstellen, der von der Angular CLI generiert wurde . Auf diese Weise kann das Tool Ihren Quellcode und seine Abhängigkeiten übernehmen und Ihnen nur das geben, was Sie zum Ausführen Ihrer Anwendung benötigen.
Davon abgesehen gibt / gab es ein Problem mit der Angular CLI in Bezug auf Produktions-Builds über `ng build --prod
Gestern (2. August 2016) wurde eine Version veröffentlicht, die den Build-Mechanismus von Broccoli + Systemjs auf Webpack umstellte, das Produktions-Builds erfolgreich verarbeitet.
Basierend auf diesen Schritten:
Ich sehe eine
dist
Ordnergröße von 1,1 MB in den 14 hier aufgeführten Dateien :Hinweis Um die Webpack-Version des Angular Cli zu installieren, müssen Sie derzeit ...
npm install angular-cli@webpack -g
quelle
Angular selbst hat viele Abhängigkeiten und die Beta-Version von CLI lädt viermal mehr Dateien herunter.
So erstellen Sie ein einfaches Projekt mit weniger Dateien ("nur" 10K-Dateien) https://yakovfain.com/2016/05/06/starting-an-angular-2-rc-1-project/
quelle
Es scheint, als hätte niemand die Ahead-of-Time-Kompilierung wie hier beschrieben erwähnt: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Meine bisherige Erfahrung mit Angular ist, dass AoT die kleinsten Builds fast ohne Ladezeit erstellt. Und das Wichtigste bei der Frage hier ist, dass Sie nur wenige Dateien an die Produktion senden müssen.
Dies scheint darauf zurückzuführen zu sein, dass der Angular-Compiler nicht mit den Produktions-Builds ausgeliefert wird, da die Vorlagen "Ahead of Time" kompiliert werden. Es ist auch sehr cool zu sehen, wie Ihr HTML-Vorlagen-Markup in Javascript-Anweisungen umgewandelt wird, die sich nur sehr schwer in das ursprüngliche HTML zurückentwickeln lassen.
Ich habe ein einfaches Video erstellt, in dem ich die Downloadgröße, die Anzahl der Dateien usw. für eine Angular-App in dev vs AoT Build demonstriere - was Sie hier sehen können:
https://youtu.be/ZoZDCgQwnmQ
Den Quellcode für die Demo finden Sie hier:
https://github.com/fintechneo/angular2-templates
Und - wie alle anderen hier sagten - es ist nichts falsch, wenn sich viele Dateien in Ihrer Entwicklungsumgebung befinden. So ist es mit all den Abhängigkeiten, die mit Angular und vielen anderen modernen Frameworks einhergehen. Der Unterschied besteht jedoch darin, dass Sie beim Versand in die Produktion in der Lage sein sollten, diese in einige Dateien zu packen. Außerdem möchten Sie nicht alle diese Abhängigkeitsdateien in Ihrem Git-Repository haben.
quelle
Dies ist eigentlich nicht Angular-spezifisch, es passiert bei fast jedem Projekt, das das NodeJs / npm-Ökosystem für seine Werkzeuge verwendet.
Diese Projekte befinden sich in den Ordnern node_modules und sind die Transitabhängigkeiten, die Ihre direkten Abhängigkeiten ausführen müssen.
In den Knoten sind Ökosystemmodule normalerweise klein, was bedeutet, dass wir, anstatt Dinge selbst zu entwickeln, das meiste, was wir brauchen, in Form eines Moduls importieren. Dies kann so kleine Dinge wie die berühmte Funktion des linken Pads beinhalten. Warum sollte man sie selbst schreiben, wenn nicht als Übung?
Viele Dateien zu haben, ist eigentlich eine gute Sache. Das bedeutet, dass alles sehr modular aufgebaut ist und Modulautoren häufig andere Module wiederverwenden. Diese einfache Modularität ist wahrscheinlich einer der Hauptgründe, warum das Knotenökosystem so schnell gewachsen ist.
Im Prinzip sollte dies kein Problem verursachen, aber es scheint, dass Sie auf ein Limit für die Anzahl der Dateien der Google App Engine stoßen. In diesem Fall schlage ich vor, node_modules nicht in die App Engine hochzuladen.
Erstellen Sie die Anwendung stattdessen lokal und laden Sie nur die gebündelten Dateien in die Google App Engine hoch, nicht jedoch in die integrierte App Engine.
quelle
Wenn Sie die neuere Version von Angular CLI verwenden, verwenden Sie
ng build --prod
Es wird ein dist- Ordner erstellt, der weniger Dateien enthält, und die Projektgeschwindigkeit wird erhöht.
Auch zum Testen vor Ort mit der besten Leistung von Winkel-Cli können Sie verwenden
ng serve --prod
quelle
Wenn Sie Angular CLI verwenden, können Sie beim Erstellen eines Projekts immer das Flag --minimal verwenden
Ich habe es gerade mit dem Flag ausgeführt und es erstellt 24 600 Dateien und
ng build --prod
erzeugt 212 KB dist OrdnerWenn Sie also in Ihrem Projekt keine Wasserfontänen benötigen oder einfach nur schnell etwas ausprobieren möchten, halte ich dies für ziemlich nützlich
quelle
Das Erstellen eines neuen Projekts mit Angular Cli vor kurzem und dem Ordner node_modules war 270 MB groß. Ja, das ist normal, aber ich bin sicher, dass die meisten neuen Entwickler in der Angular World dies in Frage stellen und gültig sind. Für ein einfaches neues Projekt wäre es sinnvoll, die Abhängigkeiten vielleicht ein wenig zu reduzieren;) Nicht zu wissen, wovon alle Pakete abhängen, kann etwas nervig sein, insbesondere für neue Entwickler, die das Cli zum ersten Mal ausprobieren. Hinzu kommt, dass in den meisten grundlegenden Lernprogrammen die Bereitstellungseinstellungen nicht erläutert werden, um nur die exportierten Dateien zu erhalten, die benötigt werden. Ich glaube nicht, dass selbst das auf der eckigen offiziellen Website angebotene Tutorial darüber spricht, wie das einfache Projekt bereitgestellt werden kann.
quelle
Hier ist ein Vergleich dessen, was in Winkelprojekten mehr Platz benötigt.
quelle
Wenn Ihr Dateisystem symbolische Links unterstützt, können Sie zumindest alle diese Dateien in einen versteckten Ordner verschieben, sodass
tree
sie von einem intelligenten Tool nicht standardmäßig angezeigt werden.Die Verwendung eines versteckten Ordners hierfür kann auch das Verständnis fördern, dass es sich um Build-bezogene Zwischendateien handelt, die nicht zur Revisionskontrolle gespeichert oder direkt in Ihrer Bereitstellung verwendet werden müssen.
quelle
Da ist nichts falsch. Dies sind alle Knotenabhängigkeiten, die Sie in package.json erwähnt haben.
Seien Sie vorsichtig, wenn Sie einen Teil des Git Hub-Projekts heruntergeladen haben. Möglicherweise gibt es viele andere Abhängigkeiten, die für die Angular 2 First Hello World-App nicht erforderlich sind :)
quelle