Was ist die beste Methode, um Angular (Version 2, 4, 6, ...) für die Produktion auf einem Live-Webserver zu bündeln?
Bitte fügen Sie die Angular-Version in die Antworten ein, damit wir besser nachverfolgen können, wenn sie auf spätere Versionen umgestellt wird.
angular
webpack
systemjs
angular-cli
Pat M.
quelle
quelle
Antworten:
2.x, 4.x, 5.x, 6.x, 7.x, 8.x, 9.x
(TypeScript) mit Angular CLIOneTime-Setup
npm install -g @angular/cli
ng new projectFolder
erstellt eine neue AnwendungBündelungsschritt
ng build --prod
(In der Befehlszeile ausführen, wenn sich das Verzeichnis befindetprojectFolder
)Flagge
prod
Bundle für die Produktion (eine Liste der Optionen, die im Produktions-Flag enthalten sind, finden Sie in der Angular-Dokumentation ).Komprimieren mit Brotli Komprimieren Sie die Ressourcen mit dem folgenden Befehl
for i in dist/*; do brotli $i; done
Bundles werden standardmäßig in projectFolder / dist (/ $ projectFolder für 6) generiert.
Ausgabe
Größen mit Angular
9.0.0
mit CLI9.0.1
und Option CSS ohne Angular-Routingdist/main-[es-version].[hash].js
Ihre Anwendung gebündelt [ES5-Größe: 158 KB für neue Angular CLI-Anwendung leer, 40 KB komprimiert].dist/polyfill-[es-version].[hash].bundle.js
die Polyfill-Abhängigkeiten (@angular, RxJS ...) gebündelt [ES5-Größe: 127 KB für neue Angular CLI-Anwendung leer, 37 KB komprimiert].dist/index.html
Einstiegspunkt Ihrer Bewerbung.dist/runtime-[es-version].[hash].bundle.js
Webpack-Laderdist/style.[hash].bundle.css
die Stildefinitionendist/assets
Ressourcen, die aus der Konfiguration der Angular CLI-Assets kopiert wurdenEinsatz
Sie können eine Vorschau Ihrer Anwendung mit dem
ng serve --prod
Befehl abrufen, mit dem ein lokaler HTTP-Server gestartet wird, sodass auf die Anwendung mit den Produktionsdateien über http: // localhost: 4200 zugegriffen werden kann .Für eine Produktionsnutzung müssen Sie alle Dateien aus dem
dist
Ordner auf dem HTTP-Server Ihrer Wahl bereitstellen .quelle
2.0.1 Final
mit Gulp (TypeScript - Ziel: ES5)OneTime-Setup
npm install
(In cmd ausführen, wenn das Verzeichnis projectFolder ist.)Schritte bündeln
npm run bundle
(In cmd ausführen, wenn das Verzeichnis projectFolder ist.)Bundles werden in projectFolder / bundles / generiert
Ausgabe
bundles/dependencies.bundle.js
[ Größe: ~ 1 MB (so klein wie möglich)]bundles/app.bundle.js
[ Größe: hängt von Ihrem Projekt ab , meins ist ~ 0,5 MB ]Dateistruktur
dist-systemjs.config.js
Tag nach den Bundle-Tags platzieren, kann das Programm weiterhin ausgeführt werden, das Abhängigkeits-Bundle wird jedoch ignoriert und Abhängigkeiten werden aus demnode_modules
Ordner geladen .Das Beste was ich bisher machen konnte :)
quelle
inline-templates
es ausgeführt wird, werden die Vorlagen inline und anschließend eine Kopie aller App-Ordner und -Dateien unter erstelltdist/app
. Dann indist-systemjs.config.js
Ihnen Karteapp
zudist/app
denen ein Ordner, der nicht vorhanden ist , wenn Sie die Verwendungdist
Ordner als root. Möchten Sie Ihre App nicht über dendist
Ordner ausführen ? In diesem Fall wäre keindist
Ordner im Stammordner verschachteltdist
. Mir muss hier noch etwas fehlen. Müssen Sie systemjs nicht anweisen, Ihre gebündelten Dateien und nicht die üblichen Dateien imdist/app
Ordner zu verwenden?Winkel 2 mit Webpack (ohne CLI-Setup)
1- Das Tutorial des Angular2-Teams
Das Angular2-Team hat ein Tutorial zur Verwendung von Webpack veröffentlicht
Ich habe die Dateien aus dem Tutorial in einem kleinen GitHub-Seed-Projekt erstellt und platziert . So können Sie den Workflow schnell ausprobieren.
Anleitung :
npm installieren
npm starten . Zur Entwicklung. Dadurch wird ein virtueller "dist" -Ordner erstellt, der unter Ihrer lokalen Hostadresse geladen wird.
npm run build . Für die Produktion. "Dadurch wird eine physische" dist "-Ordnerversion erstellt, die an einen Webserver gesendet werden kann. Der dist-Ordner ist 7,8 MB groß, aber nur 234 KB sind erforderlich, um die Seite in einen Webbrowser zu laden.
2 - Ein Webkit-Starterkit
Dieses Webpack Starter Kit bietet mehr Testfunktionen als das obige Tutorial und scheint sehr beliebt zu sein.
quelle
Angular 2-Produktionsworkflow mit SystemJs Builder und gulp
Angular.io hat ein Schnellstart-Tutorial. Ich habe dieses Tutorial kopiert und um einige einfache Gulp-Aufgaben erweitert, um alles in einem dist-Ordner zu bündeln, der auf den Server kopiert werden kann und einfach so funktioniert. Ich habe versucht, alles so zu optimieren, dass es auf Jenkis CI gut funktioniert, sodass node_modules zwischengespeichert werden können und nicht kopiert werden müssen.
Quellcode mit Beispiel-App auf Github: https://github.com/Anjmao/angular2-production-workflow
Schritte zur ProduktionKnoten : Sie können zwar immer Ihren eigenen Erstellungsprozess erstellen, ich empfehle jedoch dringend, Angular-CLI zu verwenden, da alle erforderlichen Workflows vorhanden sind und jetzt einwandfrei funktionieren. Wir verwenden es bereits in der Produktion und haben überhaupt keine Probleme mit Angular-Cli.
quelle
Angular CLI 1.xx (Funktioniert mit Angular 4.xx, 5.xx)
Dies unterstützt:
Ersteinrichtung
Du kannst hinzufügen
--style=scss
für SASS .scss Unterstützung .Du kannst hinzufügen
--ng4
Angular 4 anstelle von Angular 2 verwenden.Nach dem Erstellen des Projekts wird die CLI automatisch
npm install
für Sie ausgeführt. Wenn Sie stattdessen Garn verwenden oder nur das Projektskelett ohne Installation betrachten möchten, lesen Sie hier , wie es geht .Schritte bündeln
Im Projektordner:
In der aktuellen Version müssen Sie angeben--aot
manuell , da es im Entwicklungsmodus verwendet werden kann (obwohl dies aufgrund der Langsamkeit nicht praktikabel ist).Dies führt auch eine AoT-Kompilierung für noch kleinere Bundles durch (kein Angular-Compiler generiert stattdessen eine Compiler-Ausgabe). Die Bundles sind mit AoT viel kleiner, wenn Sie Angular 4 verwenden, da der generierte Code kleiner ist.
Sie können Ihre App mit AoT im Entwicklungsmodus (Quellkarten, keine Minimierung) und AoT testen, indem Sie ausführen
ng build --aot
.Ausgabe
Das Standardausgabeverzeichnis ist
./dist
, obwohl es in geändert werden kann./angular-cli.json
.Bereitstellbare Dateien
Das Ergebnis des Erstellungsschritts ist das Folgende:
(Hinweis:
<content-hash>
Bezieht sich auf einen Hash / Fingerabdruck des Inhalts der Datei, der als Cache-Busting gedacht ist. Dies ist möglich, da Webpack diescript
Tags selbst schreibt. )./dist/assets
Dateien kopiert wie sie sind von
./src/assets/**
./dist/index.html
Von
./src/index.html
nach webpack Skripte ihm hinzufügenQuelle Vorlagendatei konfigurierbar ist
./angular-cli.json
./dist/inline.js
Kleiner Webpack Loader / Polyfill
./dist/main.<content-hash>.bundle.js
Die Haupt-JS-Datei mit allen generierten / importierten JS-Skripten
./dist/styles.<content-hash>.bundle.js
Wenn Sie Webpack-Loader für CSS verwenden (CLI-Methode), werden diese hier über JS geladen
In älteren Versionen wurden auch komprimierte Versionen zum Überprüfen ihrer Größe und
.map
Sourcemaps-Dateien erstellt. Dies geschieht jedoch nicht mehr, da immer wieder nach dem Entfernen dieser Dateien gefragt wurde.Andere Dateien
In bestimmten anderen Fällen finden Sie möglicherweise andere unerwünschte Dateien / Ordner:
./out-tsc/
Von
./src/tsconfig.json
'soutDir
./out-tsc-e2e/
Von
./e2e/tsconfig.json
'soutDir
./dist/ngfactory/
Vom AoT-Compiler (nicht konfigurierbar, ohne die CLI ab Beta 16 zu verzweigen)
quelle
<content-hash>
aus den Bundles in Prod entferne . es kann Probleme beim Abrufen des neuesten Bundles verursachen?Bis heute finde ich das Ahead-of-Time Compilation-Kochbuch immer noch als das beste Rezept für die Produktionsbündelung. Sie finden es hier: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Meine bisherige Erfahrung mit Angular 2 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 2-App in dev vs AoT Build demonstriere - das Sie hier sehen können:
https://youtu.be/ZoZDCgQwnmQ
Den im Video verwendeten Quellcode finden Sie hier:
https://github.com/fintechneo/angular2-templates
quelle
quelle
Sie können Ihre Winkelanwendung
github
mithilfe von Winkel-Cli-Ghpages bereitstellenSchauen Sie sich den Link an, um herauszufinden, wie Sie mit dieser CLI bereitstellen können.
Die bereitgestellte Website wird in einer Zweigstelle in gespeichert
github
RegelGh-Seiten
Mit use können Sie den Git-Zweig klonen und ihn wie eine statische Website auf Ihrem Server verwenden
quelle
"Best" hängt vom Szenario ab. Es gibt Zeiten, in denen Sie sich nur um das kleinstmögliche Einzelpaket kümmern, aber in großen Apps müssen Sie möglicherweise das verzögerte Laden in Betracht ziehen. Irgendwann wird es unpraktisch, die gesamte App als einzelnes Bundle bereitzustellen.
Im letzteren Fall ist Webpack im Allgemeinen der beste Weg, da es die Codeaufteilung unterstützt.
Für ein einzelnes Bundle würde ich Rollup oder den Closure-Compiler in Betracht ziehen, wenn Sie sich mutig fühlen :-)
Ich habe Beispiele aller Angular-Bundler erstellt, die ich jemals hier verwendet habe: http://www.syntaxsuccess.com/viewarticle/angular-production-builds
Den Code finden Sie hier: https://github.com/thelgevold/angular-2-samples
Winkelversion: 4.1.x.
quelle
Richten Sie Angular 4 mit Webpack 3 innerhalb einer Minute ein. Ihr ENV-Bundle für Entwicklung und Produktion wird ohne Probleme fertig. Befolgen Sie einfach das unten stehende Github-Dokument
https://github.com/roshan3133/angular2-webpack-starter
quelle
Bitte versuchen Sie es unter dem CLI-Befehl im aktuellen Projektverzeichnis. Es wird ein dist-Ordner-Bundle erstellt. So können Sie alle Dateien im dist-Ordner für Bereitstellungen hochladen.
ng build --prod --aot --base-href.
quelle
ng serve arbeitet für die Bereitstellung unserer Anwendung für Entwicklungszwecke. Was ist mit der Produktion? Wenn wir in unsere Datei package.json schauen, können wir sehen, dass es Skripte gibt, die wir verwenden können:
Das Build-Skript verwendet den ng-Build der Angular CLI mit dem Flag --prod. Versuchen wir das jetzt. Wir können es auf zwei Arten tun:
# mit den npm-Skripten
# direkt mit dem cli
Dieses Mal erhalten wir vier Dateien anstelle der fünf. Das Flag --prod weist Angular an, unsere Anwendung viel kleiner zu machen.
quelle