Come verificare se l'applicazione angolare è in esecuzione in modalità Produzione o Sviluppo


131

Sembra facile, ma non sono riuscito a trovare alcuna soluzione.

Quindi, come posso verificare se la mia app è in esecuzione in modalità produzione o modalità sviluppo?

Risposte:


198

È possibile utilizzare questa funzione isDevMode

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

...
export class AppComponent { 
  constructor() {
    console.log(isDevMode());
  }
}

Una nota : fai attenzione con questa funzione

if(isDevMode()) {
  enableProdMode();
}

Otterrete

Errore: impossibile abilitare la modalità prod dopo l'installazione della piattaforma

Altre opzioni

variabile d'ambiente

import { environment } from 'src/environments/environment';

if (environment.production) {
  //
}

iniettato dalla variabile webpack process.env.NODE_ENV

declare let process: any;
const env = process.env.NODE_ENV;

if (env  === 'production') {
  //
}

Ricevo lo stesso errore che hai menzionato. "Impossibile abilitare la modalità prod dopo l'installazione della piattaforma". La prego di aiutarmi a risolvere questo problema? @yurzui
Gowtham,

@Gowtham Devi abilitarlo prima di chiamareplatformBrowserDynamic().bootstrapModule(AppModule);
yurzui

Questo è esattamente come lo chiamo io. Ricevo ancora questo errore ogni volta che provo a eseguire l'app in modalità di produzione @yurzui. Qualsiasi aiuto per risolvere questo sarebbe molto apprezzato. Grazie
Gowtham,

@Gowtham Hai qualche esempio per riprodurlo?
yurzui,

2
angular.io/api/core/isDevMode "Dopo aver chiamato una volta, il valore è bloccato e non cambierà più." La risposta dovrebbe includere il documento e questo avviso!
jasie,

38

Per la guida alla distribuzione angolare su https://angular.io/guide/deployment#enable-production-mode :

Costruire per la produzione (o aggiungere il flag --environment = prod) abilita la modalità di produzione Guarda la CLI generata main.tsper vedere come funziona.

main.ts ha il seguente:

import { environment } from './environments/environment';

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

Quindi controlla environment.productionper vedere se sei in produzione.

Molto probabilmente NON vuoi chiamare isDevMode(). Per la documentazione dell'API angolare su https://angular.io/api/core/isDevMode :

Dopo aver chiamato una volta, il valore è bloccato e non cambierà più ... Per impostazione predefinita, questo è vero, a meno che un utente non chiami enableProdMode prima di chiamarlo.

Ho scoperto che chiamare isDevMode()da una ng build --prodbuild ritorna sempre vero e ti blocca sempre in esecuzione in modalità dev. Invece, controlla environment.productionper vedere se sei in produzione. Quindi rimarrai in modalità di produzione.


2
Questa dovrebbe essere la risposta accettata. (Corretto collegamento e spiegazioni dei documenti.)
jasie,

1
Il fatto che il valore non cambierà non implica che non si desideri chiamarlo. Non dovresti passare dalla modalità dev alla modalità prod e viceversa mentre l'applicazione è in esecuzione. Pertanto, quando si tenta di determinare se è necessario abilitare la modalità di produzione, la variabile di ambiente è la strada giusta da percorrere, ma se si dispone di un servizio che deve comportarsi in modo leggermente diverso quando si è in modalità dev, isDevMode()è un modo perfettamente perfetto per ottenere quello.
StriplingWarrior,

4

dipende da cosa stai chiedendo ...

Se vuoi conoscere modeAngular, come ha detto @yurzui, devi chiamare { isDevMode } from @angular/corema può tornare falsesolo se chiami enableProdModeprima.

Se vuoi conoscere l' ambiente di compilazione , in altre parole, se la tua app è in esecuzione ridotta o meno, devi impostare una variabile di compilazione nel tuo sistema di compilazione ... Usando Webpack, ad esempio, dovresti dare un'occhiata definePlugin.

https://webpack.github.io/docs/list-of-plugins.html#defineplugin

new webpack.DefinePlugin({
  ENV_PRODUCTION: !!process.env.NODE_ENV
});

In realtà stavo cercando entrambi. Sto usando il webpack (attraverso l'angular-cli), dove posso aggiungere le tue righe di codice? Come posso accedere a quella variabile nei miei file dattiloscritto? Sarei fantastico se potessi aggiornare la tua risposta con questo
maxbellec,

Seguendo questo ngcli.github.io/#getting-started-project-structure dovresti modificare il webpack.config.js quindi seguire il link nella mia risposta ...
Hitmands

Il link nel tuo post è obsoleto, ecco quello corretto per il plug-in Define
HostMyBus

2
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
import { enableProdMode } from '@angular/core';
import { AppModule } from './app.module'


platformBrowserDynamic().bootstrapModule(AppModule);
enableProdMode();

Questo era il mio codice, quindi ho avuto lo stesso errore. Ho appena scambiato le righe 3 e 4. Quindi il problema è stato risolto . Quindi prima di avviare il modulo di bootstrap dovremmo abilitare la modalità --prod.

Quello corretto può essere messo in questo modo,

enableProdMode()
platformBrowserDynamic().bootstrapModule(AppModule);

1
È interessante notare che la mia nuova app Angular 9 sembra aver già inserito queste righe (in questo ordine!) Nel mio file "main.ts". Sembra essere l'impostazione predefinita ora.
Mike Gledhill il

1

Si dovrebbe fare attenzione a controllare il valore restituito della isDevMode()funzione.

La mia installazione non andava a buon fine perché stavo verificando l'esistenza: if (isDevMode)era sempre true, anche in produzione perché l'ho dichiarata con import { isDevMode } from '@angular/core';.

if (isDevMode())restituito falsecorrettamente.


prova a costruire la tua app con ng build --prod=truevia angular cli
Sathish Kumar kk

if ( isDevMode )controlla solo se l'identificatore isDevMode è definito, non null, né vuoto né zero. Poiché l'identificatore è stato definito in @angular/corequesto caso if () restituirà sempre true . Ora, if( isDevMode() )in realtà chiamerà la funzione e tornerà se è l'ambiente di sviluppo o meno.
WPomier,

1

Basta controllare la variabile di produzione presente nel file di ambiente, sarà vera per la modalità di produzione e falsa per lo sviluppo.

import { environment } from 'src/environments/environment';

if (environment.production) {
  // for production
} else {
  // for development
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.