2016-03-01 21 views
123

Ich bin neu in Angular2, ich las aufgelöst Fragen und ich fand dieseWie Produktionsmodus in Angular 2

Angular2 method binding error: "value has changed after it was checked"

was sehr interessant ist, aber meine Frage ist damit, wie kann ich von ändern Entwicklung bis zur Produktion, ist es, dass es Unterschiede nach dieser Frage

What is difference between production and development mode in Angular2?

ich suchte gelesen hat, aber finde nichts, dass die aktuelle Einstellung anzuzeigen, und wo Sie Modus anzuzeigen (Entwicklung) oder Modus (Produktion).

in der Konsole kann ich ....Call enableProdMode() to enable the production mode. sehen, aber wo in System.config({ oder in Komponentenklassen.

Ist ein spezifischer Import erforderlich?

+0

aktualisiere ich es verrückt Gang-Konfiguration mit Webpack 2+ Angular2 und Typoskript gefunden, erstellt eine einfache Lösung : https://github.com/Sweetog/yet-another-angular2-boilerplate –

Antwort

151

Sie ermöglichen es durch den Import und Ausführen der Funktion (vor Bootstrap-Aufruf):

import {enableProdMode} from '@angular/core'; 

enableProdMode(); 
bootstrap(....); 

Aber dieser Fehler ist Indikator dafür, dass etwas mit Ihren Bindungen falsch ist, so sollten Sie es nicht nur entlassen, sondern versuchen, um herauszufinden, warum es passiert.

+0

Wie aktiviert manProdMode(), wenn Sie kein Typoskript verwenden? Wenn ich diese Methode nur vor ng.platform.browser.bootstrap (...) aufrufen bekomme ich diesen Fehler: enableProdMode ist nicht definiert –

+2

@DanielDudas Ich benutze es5 nicht, aber probiere 'ng.core.enableProdMode() ' – Sasxa

+3

Ich glaube "angular2/core" ist jetzt "@ angular/core". Siehe meine Antwort unten. – adampasz

45

Dieser arbeitete für mich, die neueste Version von Angular 2 unter Verwendung von (2.0.0-rc.1):

main.ts

import {enableProdMode} from '@angular/core'; 

enableProdMode(); 
bootstrap(....); 

Hier ist die Funktionsreferenz von ihrem docs : https://angular.io/api/core/enableProdMode

+1

neuer Link: https://angular.io/docs/ts/latest/api/core/index/enableProdMode-function.html – emp

+0

@emp Ich bin überrascht, die offiziellen Angular-Dokumentation für 'enableProdMode' sagt Ihnen nicht * wo * du es nennen sollst. – Dai

35

Die beste Möglichkeit, den Produktionsmodus für eine Angular 2-Anwendung zu aktivieren, ist angular-cli zu verwenden und die Anwendung mit ng build -prod zu erstellen. Dadurch wird die Anwendung mit dem Produktionsprofil erstellt. Die Verwendung von angular-cli hat den Vorteil, dass der Entwicklungsmodus unter Verwendung von ng serve oder ng build während der Entwicklung verwendet werden kann, ohne den Code ständig zu ändern.

30

Als ich ein neues Projekt mit eckigen-Cli erstellt. Eine Datei namens environment.ts wurde hinzugefügt. Innerhalb dieser Datei befindet sich eine Variable wie diese.

export const environment = { 
    production: true 
}; 

Dann in main.ts haben Sie diese.

import './polyfills.ts'; 
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 
import { enableProdMode } from '@angular/core'; 
import { environment } from './environments/environment'; 
import { AppModule } from './app/'; 

if (environment.production) { 
    enableProdMode(); 
} 

platformBrowserDynamic().bootstrapModule(AppModule); 

Sie dies zu einem nicht kantig-cli Projekt hinzufügen könnten, würde ich annehmen, weil enableProdMode() von @ Winkel/Kern importiert wird.

+0

Wie funktioniert das für Nicht-Prod-Build? Ich nehme an, dass in diesem Fall environment.ts ignoriert wird, also erhalten Sie nicht einen TSC-Kompilierungsfehler, wenn Sie versuchen, das Modul zu importieren? – llasarov

+0

@llasarov die environment.ts verhält sich nur wie eine Konfigurationsdatei, in der Sie den Produktionsmodus ein-/ausschalten können. Main.ts ruft nur enableProdMode auf, wenn es wahr ist, also kann dies ohne einen spezifischen Build-Prozess erfolgen. Sie können auch auswählen, Protokollierung hier, indem Sie überprüfen, ob der LogMode Debug ist, dann Ihre benutzerdefinierte Logger-Service eine detaillierte StackTrace sonst nur ein One-Liner Logging – Nitin

2

Für diejenigen, die Upgrade-Pfad zu tun, ohne auch Typoskript Verwendung Schalt:

ng.core.enableProdMode() 

für mich (in Javascript) das wie folgt aussieht:

var upgradeAdapter = new ng.upgrade.UpgradeAdapter(); 
ng.core.enableProdMode() 
upgradeAdapter.bootstrap(document.body, ['fooApp']); 
0

Mein Angular 2 Projekt keinen die Datei "main.ts" erwähnte andere Antworten, aber sie hat einen "Boot".ts "Datei, die in etwa gleich zu sein scheint. (Der Unterschied ist wahrscheinlich aufgrund verschiedener Versionen von Angular.)

Hinzufügen dieser beiden Zeilen nach der letzten import Direktive in" boot.ts "arbeitete für mich:

import { enableProdMode } from "@angular/core"; 
enableProdMode(); 
2

zum src/enviroments/enviroments.ts und ermöglichen die Herstellung Modus

export const environment = { 
    production: true 
}; 

für Angular 2

1

Sie benötigen keine environment.ts oder solche Dateien, die von Ihrem Seed-Projekt bereitgestellt werden. Habe einfach eine configuration.ts und füge alle Einträge hinzu, die eine Laufzeitentscheidung erfordern (Beispiel: - Protokollierung der Konfiguration und URLs). Dies wird in jeder Design-Struktur passen und auch in Zukunft

configuration.ts helfen

export class Configuration { 

    isInProductionMode : bool = true; 

    // other configuration 
    serviceUrl : string = "http://myserver/myservice.svc"; 
    logFileName : string = "..."; 
} 

// Jetzt in Ihrem Startcode (main.ts oder gleichwertig gemäß dem Saatgutprojekt Design verwenden

import { Configuration } from './configuration'; 
import { enableProdMode } from '@angular/core'; 
.... 
if (Configuration.isInProductionMode) 
    enableProdMode(); 
+1

Wie unterscheiden Sie prod/dev mit dem 'isInProductionMode' zu ​​wahr/falsch? in der Bauzeit? –

+0

Normalerweise als GULP-Parameter oder gleichwertig – Nitin

+0

Der JSON hat Eintrag wie folgt: - "environmentSource": "environments/environment.ts", "Umgebungen": { "dev": "environments/environment.ts", " prod ":" environments/environment.prod.ts " } – Nitin

1

die meiste Zeit prod Modus nicht während der Entwicklungszeit benötigt wird. So ist unsere Problemumgehung es nur zu aktivieren, wenn es nICHT localhost ist.

In Ihrem Browser main.ts, wo Sie Ihre Wurzel AppModule definieren:

const isLocal: boolean = /localhost/.test(document.location.host); 
!isLocal && enableProdMode(); 
platformBrowserDynamic().bootstrapModule(AppModule); 

Die isLocal kann auch für andere Zwecke wie enableTracing für die RouterModule für eine bessere Debug-Stack-Trace während dev Phase verwendet werden.

1

Wenn Befehl ng bauen wird es environment.ts

standardmäßig Datei überschreiben, wenn Befehl ng bauen wird es dev Umgebung

Um zu verwenden, Produktionsumgebung, verwenden folgenden Befehl ng build-Set - -env = prod

Dies wird den Produktionsmodus aktivieren und automatisch environment.ts Datei