Unter angular.io gibt es ein Schnellstart-Tutorial, das Typoskript und Systemjs verwendet. Wie würde ich nach dem Ausführen dieser Miniapp vorgehen, um etwas Bereitstellbares zu erstellen? Ich konnte überhaupt keine Informationen darüber finden.
Benötige ich zusätzliche Tools und zusätzliche Einstellungen in System.config?
(Ich weiß, dass ich webpack verwenden und ein einzelnes bundle.js erstellen kann, aber ich möchte systemjs verwenden, wie es im Tutorial verwendet wird.)
Könnte jemand seinen Erstellungsprozess mit diesem Setup teilen (Angular 2, TypeScript, systemjs)
typescript
angular
systemjs
Brian G. Bell
quelle
quelle
Antworten:
Auf dieser Ebene ist es wichtig zu verstehen, dass Sie mit der folgenden Konfiguration kompilierte JS-Dateien nicht direkt zusammenfassen können.
Bei der TypeScript-Compilerkonfiguration:
Im HTML
Tatsächlich enthalten diese JS-Dateien anonyme Module. Ein anonymes Modul ist eine JS-Datei, die
System.register
jedoch ohne den Modulnamen als ersten Parameter verwendet wird. Dies generiert der Typoskript-Compiler standardmäßig, wenn systemjs als Modulmanager konfiguriert ist.Um alle Ihre Module in einer einzigen JS-Datei zu haben, müssen Sie die
outFile
Eigenschaft in Ihrer TypeScript-Compilerkonfiguration nutzen.Sie können das folgende innere Schlucken verwenden, um das zu tun:
Dies könnte mit einer anderen Verarbeitung kombiniert werden:
app.js
Datei zu erstellenvendor.js
Datei für Bibliotheken von Drittanbietern zu erstellenboot.js
Datei zum Importieren des Moduls zu erstellen , das die Anwendung bootstrap. Diese Datei muss am Ende der Seite enthalten sein (wenn die gesamte Seite geladen ist).index.html
, um diese beiden Dateien zu berücksichtigenDie folgenden Abhängigkeiten werden in den Schluckaufgaben verwendet:
Das Folgende ist ein Beispiel, damit es angepasst werden kann.
app.min.js
Datei erstellenvendors.min.js
Datei erstellenboot.min.js
Datei erstellenDas
config.prod.js
enthält einfach folgendes:Aktualisieren Sie die
index.html
DateiDas
index.html
sieht wie folgt aus:Beachten Sie, dass
System.import('boot');
dies am Ende des Körpers erfolgen muss, um darauf zu warten, dass alle Ihre App-Komponenten aus derapp.min.js
Datei registriert werden.Ich beschreibe hier nicht den Umgang mit CSS- und HTML-Minimierung.
quelle
Sie können den Build-Befehl angle2-cli verwenden
https://github.com/angular/angular-cli/wiki/build#bundling
Aktualisieren
Diese Antwort wurde übermittelt, als angle2 in rc4 war
Ich hatte es erneut mit Angular-Cli Beta21 und Angular2 ^ 2.1.0 versucht und es funktioniert wie erwartet
Diese Antwort erfordert die Initialisierung der App mit Angular-Cli, die Sie verwenden können
Oder auf einem bestehenden
Update 08/06/2018
Für Winkel 6 ist die Syntax unterschiedlich.
Überprüfen Sie die Dokumentation
quelle
Sie können ein Angular 2-Projekt (2.0.0-rc.1) in Typescript mit SystemJS mit Gulp und SystemJS-Builder erstellen .
Im Folgenden finden Sie eine vereinfachte Version zum Erstellen, Bündeln und Minimieren von Tour of Heroes mit 2.0.0-rc.1 ( vollständige Quelle , Live-Beispiel ).
gulpfile.js
system.config.js
quelle
gulp <taskname>
wobei "Aufgabenname" der Name der Aufgabe ist, die den SystemJS-Builder aufruft. In meinem obigen Beispiel ist dies der Fallbundle:app
. In dieser Gulp-Aufgabe können Sie das npm-Modul 'systemjs-builder' verwenden, um Ihre Systemkonfiguration und Outfile anzugeben.Hier ist meine MEA2N-Boilerplate für Angular 2: https://github.com/simonxca/mean2-boilerplate
Es ist eine einfache Boilerplate, mit
tsc
der Dinge zusammengesetzt werden. (Verwendet tatsächlich grunt-ts , was im Kern nur dertsc
Befehl ist.) Kein Wekpack usw. erforderlich.Ob Sie Grunzen verwenden oder nicht, die Idee ist:
ts/
(Beispiel:public/ts/
)tsc
diese Option, um die Verzeichnisstruktur Ihrests/
Ordners in einenjs/
Ordner zu spiegeln und nur auf Dateien in demjs/
Ordner in Ihrem Ordner zu verweisenindex.html
.Damit grunt-ts funktionieren (es sollte einen äquivalenten Befehl für einfaches tsc, Gulp usw. geben), haben Sie eine Eigenschaft in Ihrem
tsconfig.json
Aufruf"outDir": "../js"
und verweisen in Ihrergruntfile.js
mit:Führen Sie dann aus
grunt ts
, wodurch Ihre App aufgenommenpublic/ts/
und gespiegelt wirdpublic/js/
.Dort. Super leicht zu verstehen. Nicht der beste Ansatz, aber ein guter, um loszulegen.
quelle
Der einfachste Weg, den ich gefunden habe, um den Winkel rc1 für systemJs zu bündeln, ist zu verwenden
gulp
undsystemjs-builder
:Wie in den Kommentaren erwähnt, hat systemJs derzeit Probleme beim Bündeln von Komponenten mit
moduleId: module.id
https://github.com/angular/angular/issues/6131
Die aktuelle Empfehlung (Winkel 2 rc1) scheint darin zu bestehen, explizite Pfade zu verwenden, d. H.
moduleId: '/app/path/'
quelle
@Component
Dekorator verwende.bundle.js
versucht, Pfade als absolut aufzulösen, obwohl sie relativ sind, was 404 Fehler verursacht (siehe stackoverflow.com/questions/37497635/… ). Wie sind Sie damit umgegangen?moduleId
den relativen Pfad ein?moduleId: module.id
in@Component
templateUrl
und den Zweck, überhaupt etwas zu haben,moduleId
zunichte machen. Ich versuche, relative Pfade wie empfohlen zu verwenden ( angle.io/docs/ts/latest/cookbook/… )moduleId: '/app/components/home/'
Ich habe Expressjs im Backend verwendet, um mein ng2-Projekt zu bedienen. Sie können es auf meiner Github-Seite überprüfen: https://github.com/echonax/ng2-beta-and-test-framework
quelle
Auf der Angular.io-Website im Abschnitt "Erweitert / Bereitstellung" wird empfohlen, dass die einfachste Art der Bereitstellung darin besteht, die Entwicklungsumgebung auf den Server zu kopieren.
Lesen Sie den Abschnitt unter: Einfachste Bereitstellung möglich. Die endgültigen Projektdateien werden im Codeabschnitt angezeigt. Beachten Sie, dass der Code zum Laden von npm-Paketdateien aus dem Web bereits eingerichtet ist (anstelle des lokalen Ordners npm_modules).
Stellen Sie sicher, dass es auf Ihrem lokalen Computer ausgeführt wird (npm start). Kopieren Sie dann unter dem Projektordner alles im Unterordner '/ src' in den von Ihnen eingerichteten S3-Bucket. Sie können per Drag & Drop kopieren. Während dieses Vorgangs haben Sie die Möglichkeit, die Berechtigungseinstellung für die Dateien auszuwählen und sicherzustellen, dass sie für "alle" "lesbar" sind.
Suchen Sie auf der Registerkarte "Eigenschaften" des Buckets nach dem Bereich "Statisches Website-Hosting", aktivieren Sie die Option "Mit diesem Bucket die Website hosten" und geben Sie "index.html" sowohl für das Indexdokument als auch für das Fehlerdokument an.
Klicken Sie auf die statische Website Endpoint, Ihr Projekt läuft gut!
quelle