Angular uygulamasının Üretim veya Geliştirme modunda çalışıp çalışmadığını kontrol etme


132

Bu kolay görünüyor, ancak herhangi bir çözüm bulamadım.

Peki, uygulamamın üretim modunda mı yoksa geliştirme modunda mı çalıştığını nasıl kontrol ederim?

Yanıtlar:


200

Bu işlevi isDevMode kullanabilirsiniz.

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

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

Bir not : bu işlevi kullanırken dikkatli olun

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

Alacaksın

Hata: Platform kurulumundan sonra üretim modu etkinleştirilemez

Diğer seçenekler

Çevre değişkeni

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

if (environment.production) {
  //
}

webpack process.env.NODE_ENV değişken tarafından enjekte edilir

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

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

Bahsettiğiniz aynı hatayı alıyorum. "Platform kurulumundan sonra üretim modu etkinleştirilemez". Lütfen bu sorunu çözmeme yardım eder misiniz? @yurzui
Gowtham

@Gowtham Aramadan önce etkinleştirmelisinizplatformBrowserDynamic().bootstrapModule(AppModule);
yurzui

Ben de tam olarak böyle adlandırıyorum. Yine de uygulamayı @ yurzui üretim modunda çalıştırmayı her denediğimde bu hatayı alıyorum. Bunu çözmek için herhangi bir yardım çok takdir edilecektir. Teşekkürler
Gowtham

@Gowtham Onu yeniden üretmek için herhangi bir örneğiniz var mı?
yurzui

2
angular.io/api/core/isDevMode "Bir kez çağrıldıktan sonra, değer kilitlenir ve bir daha değişmez." Cevap, dokümanı ve bu uyarıyı içermelidir!
jasie

39

Https://angular.io/guide/deployment#enable-production-mode adresindeki Açısal Dağıtım kılavuzuna göre :

Üretim için derleme (veya --environment = prod bayrağının eklenmesi), üretim modunu etkinleştirir Bunun main.tsnasıl çalıştığını görmek için CLI tarafından oluşturulanlara bakın.

main.ts şunlara sahiptir:

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

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

Bu yüzden environment.productionüretimde olup olmadığınızı kontrol edin .

Büyük olasılıkla aramak istemezsiniz isDevMode(). Https://angular.io/api/core/isDevMode adresindeki Angular API belgelerine göre :

Bir kez çağrıldıktan sonra, değer kilitlenir ve artık değişmez ... Varsayılan olarak, bir kullanıcı bunu çağırmadan önce enableProdMode'u çağırmadığı sürece bu doğrudur.

Aramaya saptadık isDevMode()bir gelen ng build --prodyapı her zaman doğru döner ve her zaman dev modunda çalışan içine kilitler. Bunun yerine, environment.productionüretimde olup olmadığınızı kontrol edin . Ardından üretim modunda kalacaksınız.


2
Kabul edilen cevap bu olmalıdır. (Uygun belge bağlantısı ve açıklamalar.)
jasie

1
Değerin değişmeyeceği gerçeği, onu adlandırmak istemediğiniz anlamına gelmez. Uygulamanız çalışırken geliştirici modundan üretim moduna ve geri dönmemelisiniz. Dolayısıyla, üretim modunu etkinleştirmeniz gerekip gerekmediğini belirlemeye çalışırken, ortam değişkeni doğru yoldur, ancak geliştirme modundayken biraz farklı davranması gereken bir hizmetiniz varsa, isDevMode()bunu başarmanın mükemmel bir yoludur. söyledi.
StriplingWarrior

4

ne istediğine bağlı ...

modeAngular'ı bilmek istiyorsanız , @yurzui'nin dediği gibi, aramanız gerekir, { isDevMode } from @angular/coreancak falseyalnızca enableProdModeondan önce ararsanız geri dönebilir .

Derleme ortamını bilmek istiyorsanız , başka bir deyişle, uygulamanız küçültülmüşse veya çalışmıyorsa, derleme sisteminizde bir yapı değişkeni ayarlamanız gerekir ... WebpackÖrneğin kullanarak , bir göz atmalısınız definePlugin.

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

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

Aslında ikisini de arıyordum. Webpack kullanıyorum (açısal-cli aracılığıyla), kod satırlarınızı nereye ekleyebilirim? Daktilo dosyalarımdaki bu değişkene nasıl erişebilirim? Cevabınızı bununla güncellerseniz harika olurum
maxbellec

Bu ngcli.github.io/#getting-started-project-structure'ı takiben webpack.config.js'yi düzenlemeli ve ardından cevabımdaki bağlantıyı takip
etmelisiniz


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


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

Bu benim kodumdu, bu yüzden aynı hatayı aldım. Sadece 3. ve 4. satırı değiştirdim. Sonra sorun çözüldü . Öyleyse bootstrapping modülünden önce --prod modunu etkinleştirmeliyiz.

Doğru olan bu şekilde konulabilir,

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

1
İlginç bir şekilde, yeni Angular 9 uygulamam bu satırları (bu sırayla!) "Main.ts" dosyama zaten koymuş görünüyor. Şimdi varsayılan gibi görünüyor.
Mike Gledhill

1

isDevMode()Fonksiyonun dönüş değerini kontrol ettiğinizden emin olmalısınız .

Kurulumum başarısız oldu çünkü var olup olmadığını kontrol ediyordum: if (isDevMode)her zaman true, hatta üretimdeydi çünkü ilan ettim import { isDevMode } from '@angular/core';.

if (isDevMode())falsedoğru şekilde döndü .


uygulamanızı ng build --prod=trueangular cli ile oluşturmaya çalışın
Sathish Kumar kk

if ( isDevMode )yalnızca tanımlayıcının isDevMode tanımlı olup olmadığını, null olmadığını ve boş veya sıfır olmadığını kontrol eder . Tanımlayıcı tanımlandı gibi @angular/coreo () eğer hep dönecektir gerçek . Şimdi, if( isDevMode() )aslında işlevi çağıracak ve geliştirme ortamı olup olmadığı geri gelecektir.
WPomier

1

Ortam dosyasında bulunan üretim değişkenini kontrol edin, üretim modu için doğru ve geliştirme için yanlış olacaktır.

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

if (environment.production) {
  // for production
} else {
  // for development
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.