उत्पादन या विकास मोड में चल रहे कोणीय अनुप्रयोग की जाँच कैसे करें


131

यह एक आसान लगता है, लेकिन मुझे कोई समाधान नहीं मिला।

तो, मैं कैसे जांचूं कि मेरा ऐप उत्पादन मोड या देव मोड में चल रहा है या नहीं?

जवाबों:


198

आप इस फ़ंक्शन का उपयोग कर सकते हैं .DevMode

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

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

एक टिप्पणी : सावधान हो इस समारोह के साथ

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

तुम्हे मिल जाएगा

त्रुटि: प्लेटफ़ॉर्म सेटअप के बाद ठेस मोड को सक्षम नहीं किया जा सकता है

अन्य विकल्प

वातावरण विविधता

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

if (environment.production) {
  //
}

webpack process.env.NODE_ENV चर द्वारा इंजेक्ट किया गया

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

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

मुझे वही त्रुटि मिल रही है जिसका आपने उल्लेख किया है। "प्लेटफ़ॉर्म सेटअप के बाद ठेस मोड को सक्षम नहीं कर सकता है"। क्या आप इसे हल करने में मेरी मदद कर सकते हैं? @ युरज़ुई
गौतम

@ गौतम आपको कॉल करने से पहले इसे सक्षम करना होगाplatformBrowserDynamic().bootstrapModule(AppModule);
yurzui

यह ठीक है कि मैं इसे कैसे बुला रहा हूं। फिर भी मुझे यह त्रुटि हर बार मिल रही है जब मैं उत्पादन मोड @yurzui में एप्लिकेशन चलाने का प्रयास करता हूं। इसे हल करने में कोई मदद काफी सराहना की जाएगी। धन्यवाद
गोव्थम

@ गौतम क्या आपके पास इसे पुन: पेश करने के लिए कोई उदाहरण है?
युरज़ुई

2
angular.io/api/core/isDevMode "एक बार कॉल करने के बाद, मान लॉक हो जाता है और इससे कोई बदलाव नहीं होगा।" उत्तर में डॉक्टर और यह चेतावनी शामिल होनी चाहिए!
जस्सी 16'19

38

Https://angular.io/guide/deployment#enable-production-mode पर कोणीय परिनियोजन मार्गदर्शिका के अनुसार :

उत्पादन के लिए भवन (या - thevironment) = फ्लैगशिप को जोड़ना उत्पादन मोड को सक्षम बनाता है यह देखने के लिए CLI- जनरेट main.tsकरें कि यह कैसे काम करता है।

main.ts निम्नलिखित है:

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

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

इसलिए यह देखने के environment.productionलिए जांचें कि क्या आप उत्पादन में हैं।

सबसे अधिक संभावना है कि आप कॉल नहीं करना चाहते हैं isDevMode()Https://angular.io/api/core/isDevMode पर कोणीय एपीआई प्रलेखन प्रति :

एक बार कॉल करने के बाद, मान लॉक हो जाता है और कोई और परिवर्तन नहीं करेगा ... डिफ़ॉल्ट रूप से, यह सच है, जब तक कि उपयोगकर्ता कॉल करने के बाद EnableProdMode को कॉल नहीं करता है।

मैंने पाया है कि isDevMode()एक ng build --prodबिल्ड से कॉल करना हमेशा सही रहता है और हमेशा आपको देव मोड में चलने से रोकता है। इसके बजाय, यह देखने के environment.productionलिए जांचें कि क्या आप उत्पादन में हैं। फिर आप उत्पादन मोड में रहेंगे।


2
यह स्वीकृत उत्तर होना चाहिए। (उचित डॉक लिंकिंग और स्पष्टीकरण।)
जस्सी

1
यह तथ्य कि मूल्य नहीं बदलेगा, इसका मतलब यह नहीं है कि आप इसे कॉल नहीं करना चाहते हैं। जब आपका एप्लिकेशन चल रहा हो, तो आपको देव मोड से वापस मोड और बैक पर स्विच नहीं करना चाहिए। इसलिए जब आप यह निर्धारित करने की कोशिश कर रहे हैं कि क्या आपको उत्पादन मोड को सक्षम करना चाहिए, तो पर्यावरण चर जाने का सही तरीका है, लेकिन अगर आपके पास एक ऐसी सेवा है जिसे देव मोड में होने पर थोड़ा अलग तरीके से व्यवहार करने की आवश्यकता है, तो isDevMode()यह पूरी तरह से ठीक तरीका है उस।
स्ट्रिपिंगवर्यर

4

यह इस बात पर निर्भर करता है कि आप क्या पूछ रहे हैं ...

यदि आप modeकोणीय के बारे में जानना चाहते हैं , तो @yurzui ने कहा, आपको कॉल करने की आवश्यकता है { isDevMode } from @angular/coreलेकिन यह falseतभी वापस आ सकता है जब आप कॉल करेंenableProdMode इससे पहले करते हैं।

यदि आप बिल्ड पर्यावरण को जानना चाहते हैं , तो दूसरे शब्दों में, यदि आपका ऐप मिनिमाइज्ड चल रहा है या नहीं, तो आपको अपने बिल्ड सिस्टम में बिल्ड वैरिएबल सेट करने की आवश्यकता है ... Webpackउदाहरण के लिए, आपको एक नजर डालनी चाहिए definePlugin

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

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

मैं वास्तव में दोनों की तलाश में था। मैं वेबपैक (कोणीय-क्ली के माध्यम से) का उपयोग कर रहा हूं, मैं आपके कोड की लाइनें कहां जोड़ूं? मैं अपनी टाइपस्क्रिप्ट फ़ाइलों में उस चर तक कैसे पहुँच सकता हूँ? मुझे बहुत अच्छा होगा यदि आप अपना उत्तर उस के साथ अपडेट कर सकें
maxbellec

इस ngcli.github.io/#getting-started-project-structure के बाद आपको webpack.config.js को संपादित करना चाहिए, फिर मेरे उत्तर में लिंक का अनुसरण करें ...
Hitmands

अपनी पोस्ट में लिंक पुरानी है, यहाँ के लिए सही एक को परिभाषित करें प्लगइन
HostMyBus

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


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

यह मेरा कोड था, इसलिए मुझे वही त्रुटि मिली। मैंने अभी लाइन 3 और 4 को इंटरचेंज किया है। फिर यह मुद्दा तय हो गया है । इसलिए बूटस्ट्रैपिंग मॉड्यूल से पहले हमें -प्रोड मोड को सक्षम करना चाहिए।

सही एक को इस तरह से रखा जा सकता है,

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

1
दिलचस्प बात यह है कि मेरे नए Angular 9 ऐप ने इन पंक्तियों को (इस क्रम में!) मेरी "main.ts" फ़ाइल में पहले ही डाल दिया है। अब यह तयशुदा लग रहा है।
माइक गल्डहिल

1

आपको सावधान रहना चाहिए कि आप isDevMode()फ़ंक्शन के रिटर्न मान की जांच करते हैं ।

मेरा सेटअप विफल हो रहा था क्योंकि मैं अस्तित्व के लिए जाँच कर रहा था: if (isDevMode)हमेशा trueउत्पादन में भी था , क्योंकि मैंने इसे घोषित किया थाimport { isDevMode } from '@angular/core';

if (isDevMode())falseसही ढंग से लौटा ।


ng build --prod=trueकोणीय cli
सतीश कुमार kk

if ( isDevMode )केवल जाँचता है कि पहचानकर्ता है .DevMode परिभाषित है, शून्य नहीं है, और न ही खाली है और न ही शून्य है। के रूप में पहचानकर्ता में परिभाषित किया गया था @angular/coreकि अगर () हमेशा सच वापस आ जाएगा । अब, if( isDevMode() )वास्तव में फ़ंक्शन को कॉल करेगा और यह वापस आएगा यदि यह विकास का वातावरण है या नहीं।
WPomier

1

बस पर्यावरण फ़ाइल में मौजूद उत्पादन चर की जांच करें, यह उत्पादन मोड के लिए सही होगा और विकास के लिए गलत होगा।

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

if (environment.production) {
  // for production
} else {
  // for development
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.