web-dev-qa-db-ger.com

Angular 4 ng dienen - prod vs ng dienen

In Kürze habe ich eine App, die 4,6MB auf ng dienen soll.

Wenn ich tue:

ng dienen --prod

Ich bekomme 1 MB Dateigröße.

Die --prod macht jedoch irgendwie meine gesamte Anwendung kaputt.

Meine gesamten Dienste (Versprechen basierend), die eine Anfrage an den Server senden, funktionieren nicht mehr.

Das Bizzar-Ding ist, dass einfach ng serve perfekt funktioniert UND bestimmte Teile von ng serve - prod auch gut funktionieren, solange es gibt keine Serveranfrage.

Ich poste keinen Code, da ng dienen-Version in Ordnung ist.

Die Hauptfrage ist: 

Warum bekomme ich so ein Verhalten?

Darüber hinaus funktionierte die auf ng serve - prod basierende App irgendwann völlig aus dem Nichts und dann, nachdem ich die App neu gestartet hatte, eine defekte App.

EDIT:weitere Einzelheiten EXPLICIT:

Ich verwende Fiddler, um sicherzustellen, dass alle Angaben korrekt sind:

 Fiddler pic

Wie Sie sehen können, sind die Details in Ordnung.

Nun zu dem Code, der verantwortlich ist, um diese Anforderung auf der Clientseite zu simulieren:

    login(uName: string, pw: string, type: number): Promise<any> {
    return new Promise(resolve => {
        if (type === 1) {
            const options = new RequestOptions({ headers: this.headers });
            const body = JSON.stringify({ username: uName, password: pw });
            this.http.post(this.loginUrl, body, options)
                .toPromise()
                .then(response => {
                    resolve(response);
                })
                .catch(this.handleError);
        } else if (type === 2 || type === 3) {
            this.http.post(this.loginUrl, { username: uName, token: pw })
                .toPromise()
                .then(response => {
                    resolve(response);
                })
                .catch(this.handleError);
        }
    });
}

Beachten Sie jetzt, wie alles perfekt funktioniert, wenn ich nur ng serve (Network Tab) verwende:

 ng serve

Wie Sie sehen, bin ich bereits eingeloggt und bekomme eine Antwort.

Jetzt,

Der Moment, den ich tue 

ng dienen --prod

Plötzlich funktioniert dieselbe Login-Anfrage mit denselben Details nicht mehr:

 ng serve --prod

Das ist super Bizzar.

Alle meine Methoden, die für Serveranforderungen verantwortlich sind, sind alle gleich.

"Bad Request" mit einem Fehlercode, der vom Server selbst stammt (mein eigener Servercode wie "E-Mail nicht gefüllt", der auch bizzar ist, da ich die korrekten Parameter sende)

5
simon

--prod ist die Option zum Erstellen, der Debugmodus ist standardmäßig aktiviert

Sehen wir uns ein Beispiel dafür an, warum Anwendungsbrüche auftreten. Sehen Sie, wir haben folgenden Code:

<div (click)="toshow = !toShow">Toggle</div>

stellen Sie sich vor, toshow ist nicht auf der Komponente definiert, oder aus Versehen haben wir einen Tippfehler toShow zu toshow gesagt.

In diesem Fall funktionieren ng build und ng serve, aber ng build --prod und ng serve --prod geben einen Fehler aus 

1
Ali Adravi

Wir waren auch mit einem ähnlichen Problem konfrontiert und haben diese Richtlinien befolgt. Das Problem ist, dass AOT einige Funktionen, die JIT unterstützt, nicht unterstützt. Bitte überprüfen Sie diesen Link. hoffentlich wird es dir helfen.

https://github.com/rangle/angular-2-aot-sandbox

Angular DOC Über AOT-Einschränkungen

wenn Sie ng serve --prod angle erstellt haben, erstellen Sie einen Build-Build mit Tree Shaking und AOT (Ahead Of Time) -Kompilierung

Dies bedeutet, dass der Baum alle Komponenten schüttelt und hinzugefügt, was tatsächlich in Ihrem Code verwendet wurde, nicht alle. Auf diese Weise sehen Sie, dass vendor.js wirklich etwas ist, als Sie ng serve

sie können in der cli-Dokumentation detailliert nachlesen, welcher Build was tut.

0
Aniruddha Das