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.ts
aby 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 --prod
kompilacji zawsze zwraca prawdę i zawsze blokuje działanie w trybie deweloperskim. Zamiast tego sprawdź, environment.production
czy 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ć mode
Angular, jak powiedział @yurzui, musisz zadzwonić, { isDevMode } from @angular/core
ale może wrócić false
tylko wtedy, gdy zadzwonisz enableProdMode
wcześ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 Webpack
na 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 false
poprawnie.
ng build --prod=true
via 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
}