Jak włączyć tryb produkcyjny?

182

Czytałem powiązane pytania i znalazłem to , ale moje pytanie brzmi: jak mogę przejść z trybu programowania do trybu produkcji. Istnieją pewne różnice między trybami, które są tutaj wskazane .

W konsoli widzę ....Call enableProdMode() to enable the production mode.Jednak nie jestem pewien, jakiego typu powinienem wywołać tę metodę.

Czy ktoś może odpowiedzieć na to pytanie?

Angel Angel
źródło
Zauważyłem, że to szalone przekazywanie konfiguracji za pomocą Webpacka 2+ Angular2 i maszynopisu, stworzyłem proste rozwiązanie: github.com/Sweetog/yet-another-angular2-boilerplate
Brian Ogden

Odpowiedzi:

211

Włączysz go, importując i wykonując funkcję (przed wywołaniem bootstrap):

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

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

Ale ten błąd wskazuje, że coś jest nie tak z twoimi powiązaniami, więc nie powinieneś po prostu go odrzucać, ale spróbuj dowiedzieć się, dlaczego tak się dzieje.

Sasxa
źródło
Jak włączyćProdMode (), jeśli nie używasz maszynopisu? Jeśli po prostu wywołam tę metodę przed ng.platform.browser.bootstrap (...) dostaję ten błąd: enableProdMode nie jest zdefiniowany
Daniel Dudas
2
@DanielDudas Nie używam es5, ale próbujęng.core.enableProdMode()
Sasxa
3
Wierzę, że „angular2 / core” to teraz „@ angular / core”. Zobacz moją odpowiedź poniżej.
adampasz
Używam Ionic2. W jakim pliku nazywa się ten bootstrap? Gdy generuję przykładową aplikację ionic start test sidemenu --v2 --ts, widzę, app.tsale jak nazywa się ta funkcja ładowania początkowego?
Guus
1
Zrobiłem to samo, ale otrzymuję wyjątek, taki jak „Nie można włączyć trybu prod po konfiguracji platformy”. Czy ktoś może mi pomóc w rozwiązaniu tego problemu?
Gowtham
81

Najlepszym sposobem na włączenie trybu produkcyjnego dla aplikacji Angular 2 jest użycie angular-cli i zbudowanie aplikacji ng build --prod. Spowoduje to zbudowanie aplikacji z profilem produkcyjnym. Korzystanie z angular-cli ma tę zaletę, że może korzystać z trybu programowania przy użyciu ng servelub ng buildpodczas programowania bez zmiany kodu przez cały czas.

Matthias B.
źródło
6
Używam Angulara 6 i to ng build - produkt do budowania w trybie prod. Po prostu umieszczam to tutaj dla nowo przybyłych odwiedzających tę stronę.
Verbose
Myślę, że build --prod został zaimplementowany z uwzględnieniem IsDevMode i włączeniaProdMode. Ta odpowiedź powinna być oznaczona jako odpowiedź
bubi
55

Kiedy zbudowałem nowy projekt za pomocą angular-cli. Dołączono plik o nazwie environment.ts. Wewnątrz tego pliku jest taka zmienna.

export const environment = {
  production: true
};

Następnie w main.ts masz to.

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);

Zakładam, że można dodać to do projektu nie angular-cli, ponieważ importProdMode () jest importowany z @ angular / core.

howserss
źródło
Jak to działa w przypadku kompilacji innej niż produkcyjna? Zakładam, że w takim przypadku środowisko. T jest ignorowane, więc nie pojawia się błąd kompilacji tsc podczas próby zaimportowania modułu?
llasarov,
@llasarov the environment.ts zachowuje się jak plik konfiguracyjny, w którym można włączyć / wyłączyć tryb produkcyjny. Main.ts po prostu wywołuje enableProdMode, jeśli jest prawdziwy, więc można to zrobić bez żadnego konkretnego procesu kompilacji. Możesz także wybrać rejestrowanie tutaj, sprawdzając, czy tryb logu jest debugowany, a następnie niestandardowa usługa rejestratora robi szczegółowe StackTrace, w przeciwnym razie rejestruje tylko jedną linijkę
NitinSingh
13

Przejdź do src/enviroments/enviroments.tsi włącz tryb produkcyjny

export const environment = {
  production: true
};

dla Angular 2

Alexander Schmidt
źródło
10

Aby włączyć tryb produkcyjny w wersji kątowej 6.XX Wystarczy przejść do pliku środowiska

Podoba mi się ta ścieżka

Twoja ścieżka: project>\src\environments\environment.ts

Zmień production: falsez:

export const environment = {
  production: false
};

Do

export const environment = {
  production: true
};

wprowadź opis zdjęcia tutaj

Osama khodrog
źródło
8

W większości przypadków tryb prod nie jest potrzebny podczas programowania. Dlatego naszym obejściem jest włączenie go tylko wtedy, gdy NIE jest to host lokalny.

W przeglądarkach, w main.tsktórych definiujesz swój główny moduł AppModule:

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

isLocalMogą być również wykorzystywane do innych celów, takich jak enableTracingdla RouterModuledla lepszego debugowania ślad stosu podczas dev fazie.

LeOn - Han Li
źródło
6

Gdy używana jest komenda ng build, zastępuje plik environment.ts

Domyślnie, gdy używana jest komenda ng build, ustawia środowisko programistyczne

Aby korzystać ze środowiska produkcyjnego, użyj następującego polecenia ng build --env = prod

Umożliwi to tryb produkcji i automatycznie zaktualizuje plik environment.ts

Waqas Saleem
źródło
1
Zostało to zmienione w Angular CLI 6 na ng build --configuration=production(domyślnie przy użyciu pliku angular.json wygenerowanego przez CLI).
slasky
5

możesz użyć w app.ts || plik main.ts

import {enableProdMode} from '@angular/core';
enableProdMode();
bootstrap(....);
Samudrala Ramu
źródło
4

Osoby wykonujące ścieżkę aktualizacji bez przełączania się na TypeScript:

ng.core.enableProdMode()

Dla mnie (w javascript) wygląda to następująco:

var upgradeAdapter = new ng.upgrade.UpgradeAdapter();
ng.core.enableProdMode()
upgradeAdapter.bootstrap(document.body, ['fooApp']);
Ryan Crews
źródło
4

Nie potrzebujesz żadnego pliku environment.ts ani takiego pliku, który dostarczy Twój projekt początkowy. Wystarczy mieć plik configuration.ts i dodać wszystkie takie wpisy, które wymagają decyzji środowiska wykonawczego (przykład: - rejestrowanie konfiguracji i adresów URL). Będzie to pasować do dowolnej struktury projektu, a także pomoże w przyszłości

Configuration.ts

export class Configuration {

   isInProductionMode : bool = true;

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

// Teraz użyj w kodzie startowym (main.ts lub równoważny zgodnie z projektem projektu początkowego

import { Configuration } from './configuration';
import { enableProdMode } from '@angular/core';
....
if (Configuration.isInProductionMode)
    enableProdMode();
NitinSingh
źródło
1
Jak odróżniasz prod / dev od tego, isInProductionModeaby było prawdziwe / fałszywe? w czasie kompilacji?
LeOn - Han Li
Zwykle jako parametr GULP lub równoważny
NitinSingh,
JSON ma następujący wpis: - „environmentSource”: „environment / environment.ts”, „environment”: {„dev”: „environment / environment.ts”, „prod”: „environment / environment.prod.ts” }
NitinSingh,
4

W pliku environment.ts produkcja zestawu ma wartość true

export const environment = {
  production: true
};
Vinodh Ram
źródło
Naprawdę EZ: P TY dla ...!
Carlos Galeano,
4

ng build --prod zamienia environment.ts na environment.prod.ts

ng build --prod

Mahmoudi MohamedAmine
źródło
0

Mój projekt Angular 2 nie ma pliku „main.ts” wspomnianego w innych odpowiedziach, ale ma plik „ boot.ts ”, który wydaje się być podobny. (Różnica wynika prawdopodobnie z różnych wersji Angulara).

Dodanie tych dwóch wierszy po ostatniej importdyrektywie w „boot.ts” działało dla mnie:

import { enableProdMode } from "@angular/core";
enableProdMode();
Gyromite
źródło