Odpowiedzi:
Możesz użyć tej funkcji jest DevMode
import { isDevMode } from '@angular/core';
...
export class AppComponent {
constructor() {
console.log(isDevMode());
}
}
Jedna uwaga : zachowaj ostrożność podczas korzystania z tej funkcji
if(isDevMode()) {
enableProdMode();
}
Dostaniesz
Błąd: nie można włączyć trybu produkcyjnego po konfiguracji platformy
Zmienna środowiskowa
import { environment } from 'src/environments/environment';
if (environment.production) {
//
}
wstrzyknięta przez webpack zmienna process.env.NODE_ENV
declare let process: any;
const env = process.env.NODE_ENV;
if (env === 'production') {
//
}
platformBrowserDynamic().bootstrapModule(AppModule);
Zgodnie z przewodnikiem po Angular Deployment pod adresem https://angular.io/guide/deployment#enable-production-mode :
Tworzenie do celów produkcyjnych (lub dołączanie flagi --environment = prod) włącza tryb produkcyjny Spójrz na wygenerowany przez CLI,
main.tsaby zobaczyć, jak to działa.
main.ts ma następujące cechy:
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
Więc sprawdź environment.production czy jesteś w produkcji.
Najprawdopodobniej NIE chcesz dzwonić isDevMode(). Zgodnie z dokumentacją Angular API na https://angular.io/api/core/isDevMode :
Po jednokrotnym wywołaniu wartość jest blokowana i już się nie zmieni ... Domyślnie jest to prawda, chyba że użytkownik wywoła metodę enableProdMode przed wywołaniem tego.
Odkryłem, że wywołanie isDevMode()z ng build --prodkompilacji zawsze zwraca prawdę i zawsze blokuje działanie w trybie deweloperskim. Zamiast tego sprawdź, environment.productionczy jesteś w produkcji. Następnie pozostaniesz w trybie produkcyjnym.
isDevMode()jest to doskonały sposób na osiągnięcie że.
Jeśli chcesz poznać modeAngular, jak powiedział @yurzui, musisz zadzwonić, { isDevMode } from @angular/coreale może wrócić falsetylko wtedy, gdy zadzwonisz enableProdModewcześniej.
Jeśli chcesz poznać środowisko kompilacji , innymi słowy, czy Twoja aplikacja działa w wersji zminimalizowanej, czy nie, musisz ustawić zmienną kompilacji w swoim systemie kompilacji ... Używając Webpackna przykład, powinieneś rzucić okiem definePlugin.
https://webpack.github.io/docs/list-of-plugins.html#defineplugin
new webpack.DefinePlugin({
ENV_PRODUCTION: !!process.env.NODE_ENV
});
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
import { enableProdMode } from '@angular/core';
import { AppModule } from './app.module'
platformBrowserDynamic().bootstrapModule(AppModule);
enableProdMode();
To był mój kod, więc mam ten sam błąd. Właśnie zamieniłem linię 3 i 4. Wtedy problem został rozwiązany . Dlatego przed uruchomieniem modułu powinniśmy włączyć tryb --prod.
Właściwy można umieścić w ten sposób,
enableProdMode()
platformBrowserDynamic().bootstrapModule(AppModule);
Należy uważać, aby sprawdzić wartość zwracaną przez isDevMode()funkcję.
Moja konfiguracja nie powiodła się, ponieważ sprawdzałem istnienie: if (isDevMode)była zawsze true, nawet w środowisku produkcyjnym, ponieważ zadeklarowałem to za pomocą import { isDevMode } from '@angular/core';.
if (isDevMode())zwrócone falsepoprawnie.
ng build --prod=truevia angular cli
if ( isDevMode )sprawdza tylko, czy zdefiniowano identyfikator isDevMode , a nie null, pusty ani zero. Ponieważ identyfikator został zdefiniowany @angular/core, if () zawsze będzie zwracać true . Teraz if( isDevMode() )faktycznie wywoła funkcję i zwróci, jeśli jest to środowisko programistyczne, czy nie.
Po prostu sprawdź zmienną produkcyjną obecną w pliku środowiskowym, będzie ona prawdziwa dla trybu produkcyjnego i fałszywa dla programowania.
import { environment } from 'src/environments/environment';
if (environment.production) {
// for production
} else {
// for development
}