process.env.NODE_ENV अपरिभाषित है


168

मैं NodeJs पर एक ट्यूटोरियल का पालन करने की कोशिश कर रहा हूं। मुझे नहीं लगता कि मैंने कुछ भी याद किया, लेकिन जब भी मैं process.env.NODE_ENVएकमात्र मूल्य को वापस बुलाता हूं वह अपरिभाषित है। मेरे शोध के अनुसार डिफ़ॉल्ट मान 'विकास' होना चाहिए। यह मान कैसे गतिशील रूप से सेट किया गया है और यह शुरू में कहाँ सेट किया गया है?


NOCE_ENV को हरोकू ऐप्स के लिए सेट करने के लिए जिनका आप उपयोग कर सकते हैं:heroku config:set NODE_ENV="production"
धक्का देकर

14
हालाँकि नीचे दिए गए उत्तर अस्थायी रूप से पर्यावरण चर को सेट करके समस्या का समाधान करेंगे, यहाँ बड़ा सबक यह होना चाहिए कि आप कभी भी यह नहीं जान सकते हैं कि क्या कोई पर्यावरण चर निर्धारित किया जाएगा ... इसलिए अपने कोड को तदनुसार लिखें और परीक्षण करें कि क्या यह निर्धारित है और यदि ऐसा है किसका। इसके बारे में धारणा न बनाएं।
स्टिजन डे विट

जवाबों:


193

process.env आपके पर्यावरण के लिए एक संदर्भ है, इसलिए आपको वहां चर सेट करना होगा।

विंडोज में एक पर्यावरण चर सेट करने के लिए :

SET NODE_ENV=development

OS X या लिनक्स पर :

export NODE_ENV=development

4
आप जोड़ सकते हैं कि अगर NODE_ENV सेट नहीं है तो ऐप "विकास" मोड में व्यवहार करता है
रोक्को

1
लिनक्स के लिए, vi ~ / .bash_profile, फिर NODE_ENV = विकास डालें और सहेजें।
stonyau

6
यदि कोई और संघर्ष करता है ... "SET V = VAL" और "SET V = VAL" में अंतर है। रिक्त स्थान।
विलेम

4
ध्यान दें कि मॉड्यूल "क्रॉस-एनवी" उपरोक्त के समान करने के लिए, और यह ओएसएक्स और विंडोज दोनों पर काम करेगा: "क्रॉस-एनओडी एनओडीईईएनवी = विकास"। आपको पहले क्रॉस-एनवी स्थापित करने की आवश्यकता है: "एनपीएम इंस्टॉल क्रॉस-एनवी - एसवी"। अपने पैकेज में स्क्रिप्ट में रखें। Json और आप दोनों प्लेटफार्मों पर जाने के लिए अच्छे हैं।
एंटोनियो ब्रैंडाओ

6
मेरे लिए काम नहीं किया। मैंने export NODE_ENV=developmentएक react-native run-iosही टर्मिनल से करने से पहले अपने मैक टर्मिनल पर अमल किया । डिबगिंग करते समय, का मान process.env.NODE_ENVअपरिभाषित होता है।
ऐश

58

युक्तियाँ

में package.json:

"scripts": {
  "start": "set NODE_ENV=dev && node app.js"
 }

में app.js:

console.log(process.env.NODE_ENV) // dev
console.log(process.env.NODE_ENV === 'dev') // false
console.log(process.env.NODE_ENV.length) // 4 (including a space at the end) 

तो, यह बेहतर हो सकता है:

"start": "set NODE_ENV=dev&& node app.js"

या

console.log(process.env.NODE_ENV.trim() === 'dev') // true

2
आप क्या कर सकते हैं, इसलिए आपको ट्रिम करने की ज़रूरत नहीं है:"start": "set NODE_ENV=dev&& node app.js"
जेड। खुल्लाह

उत्कृष्ट अवलोकन, console.log(process.env.NODE_ENV.length) // 4 (अंत में एक स्थान सहित)
gregn3

1
यह अधिक सुरक्षित है: console.log(('' + process.env.NODE_ENV).trim() === 'dev') // trueक्योंकि यह एक त्रुटि भी नहीं डालेगा भले ही process.env.NODE_ENV अपरिभाषित हो।
gregn3

52

* निक्स (लिनक्स, ओएस एक्स, इत्यादि) का उपयोग करने वाले लोगों के लिए, इसे दूसरी निर्यात कमांड के माध्यम से करने का कोई कारण नहीं है, आप इसे चालान कमांड के हिस्से के रूप में चेन कर सकते हैं:

NODE_ENV=development node server.js

आसान, नहीं? :)


3
क्रॉस-एनव जैसा पैकेज अनुमति देगा कि खिड़कियों पर भी काम करें।
वॉकएरैंडोफिमिथ सिप

35

विंडोज पर नोड के साथ काम करते समय हम इस समस्या में भाग गए।

इन चरों को सेट करने के लिए ऐप को चलाने का प्रयास करने वाले किसी भी व्यक्ति की आवश्यकता के बजाय, हमने आवेदन के भीतर एक वापसी प्रदान की।

var environment = process.env.NODE_ENV || 'development';

उत्पादन के माहौल में, हम इसे सामान्य तरीकों (SET / Export) के अनुसार परिभाषित करेंगे।


3
यह सबसे व्यावहारिक उपाय है।
druskacik

12

आप क्रॉस-एनवी का उपयोग कर सकते हैं npm पैकेज का । यह पर्यावरण चर को ट्रिम करने का ख्याल रखेगा, और यह भी सुनिश्चित करेगा कि यह विभिन्न प्लेटफार्मों पर काम करता है।

प्रोजेक्ट रूट में, चलाएँ:

npm install cross-env

फिर अपने पैकेज में। स्क्रिप्ट के तहत, जोड़ें:

"start": "cross-env NODE_ENV=dev node your-app-name.js"

फिर अपने टर्मिनल में, प्रोजेक्ट रूट पर, अपना ऐप चलाकर शुरू करें:

npm start

पर्यावरण चर तब आपके ऐप में उपलब्ध होगा process.env.NODE_ENV, जिससे आप कुछ ऐसा कर सकते हैं:

if (process.env.NODE_ENV === 'dev') {
  // Your dev-only logic goes here
}

मुझे नहीं लगता कि यह काम करता है। मेरे वर्तमान प्रोजेक्ट में इसे आजमाया और NODE_ENV अभी भी अपरिभाषित है। यह काम करने के लिए कुछ और विन्यास की आवश्यकता हो सकती है।
आकाश ठाकुर

npm install --save-dev cross-env
DalSoft

9

in package.json हम नीचे की तरह कॉन्फ़िगर करने के लिए है (लिनक्स और मैक ओएस में काम करता है)

महत्वपूर्ण बात यह है "निर्यात NODE_ENV = उत्पादन" आपके निर्माण के आदेश के बाद नीचे एक उदाहरण है:

  "scripts": {
     "start": "export NODE_ENV=production && npm run build && npm run start-server",
     "dev": "export NODE_ENV=dev && npm run build && npm run start-server",
  } 
  • देव वातावरण के लिए, हमें "npm run dev" कमांड को हिट करना होगा

  • उत्पादन वातावरण के लिए, हमें "npm run start" कमांड को हिट करना होगा


9

में MacOS उन लोगों के लिए है जो एक्सप्रेस संस्करण उपयोग कर रहे 4.x.xहैं और का उपयोग कर DOTENVप्लगइन, इस तरह उपयोग करने की आवश्यकता:

  1. प्लग इन इंस्‍टॉल इंस्‍टॉल करने के बाद उस फ़ाइल में जहां आप एप्लिकेशन को इंसिट करते हैं: require('dotenv').config({path: path.resolve(__dirname+'/.env')});

  2. रूट डायरेक्टरी में एक फ़ाइल '.env' बनाएं और जैसे वैरायबल जोड़ें:

    NODE_ENV=development या NODE_ENV = development



1

यह OS के कारण है

अपने package.json में, सुनिश्चित करें कि आपकी स्क्रिप्ट्स (जहाँ app.js आपकी मुख्य js फ़ाइल है जिसे निष्पादित किया जाना है और NODE_ENV को .env फ़ाइल में घोषित किया गया है) .Eg

"scripts": {
    "start": "node app.js",
    "dev": "nodemon server.js",
    "prod": "NODE_ENV=production & nodemon app.js"
  }

विंडोज के लिए

NODE_ENV = विकास वाले अपने .env फ़ाइल चर को भी सेट करें

यदि आपकी .env फ़ाइल उदाहरण के लिए एक फ़ोल्डर में है ।config फ़ोल्डर app.js में निर्दिष्ट करना सुनिश्चित करता है (आपका मुख्य फ़ाइल एक्सटेंशन)

const dotenv = आवश्यकता ('dotenv'); dotenv.config ({पथ: './config/config.env'});


0

यदि आपको रिएक्ट में इस प्रोबेम का सामना करना पड़ा है, तो आपको प्रतिक्रिया की आवश्यकता है-cripts@0.2.3 और उच्चतर। इसके अलावा अन्य पर्यावरण चर के NODE_ENVलिए प्रतिक्रिया में काम करने के लिए, उन्हें साथ उपसर्ग करने की आवश्यकता है REACT_APP_


0

अपने आवेदन में जितनी जल्दी हो सके, आवश्यकता होती है और dotenv को कॉन्फ़िगर करें।

require('dotenv').config()


-3

आप इसे कोड द्वारा भी सेट कर सकते हैं, उदाहरण के लिए:

process.env.NODE_ENV = 'test';


67
मैं कभी भी किसी को एप्लिकेशन लॉजिक में पर्यावरण पहचानकर्ता को बदलने से हतोत्साहित करता हूं। आप कभी नहीं चाहते हैं कि एप्लिकेशन को अचानक लगे कि यह वास्तव में कुछ और है। इसे केवल सिस्टम-स्तर पर ही बदला जाना चाहिए, क्योंकि कई अन्य उत्तर सुझाते हैं।
काफोसो

7
आप 12 फ़ैक्टर ऐप्स के बारे में पढ़ना चाह सकते हैं: 12factor.net/config । यह कोड उसी का उल्लंघन होगा। आपके कॉन्‍फ़‍िगर को अपने कोड से अलग रखने के अच्‍छे कारण हैं।
जूलम

1
यह केवल स्वचालित परीक्षण के लिए उपयोगी हो सकता है, लेकिन फिर भी इसे सीधे एनवी से पढ़े जाने के बजाय आपके मुख्य कोड में अमूर्त और इंजेक्ट किया जा सकता है।
एंजेलोस पिकोलस

चलिए इस जवाब को इतना कम नहीं करते हैं कि @Kafoso द्वारा जानकारीपूर्ण टिप्पणी कम हो जाती है। या इस जानकारी को कुछ अच्छी तरह से मतदान जवाब में जोड़ें।
विभोर दूब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.