OS X में उत्पादन / विकास के लिए NODE_ENV कैसे सेट करें


जवाबों:


663

अपना ऐप चलाने से पहले, आप इसे कंसोल में कर सकते हैं,

export NODE_ENV=production

या यदि आप खिड़कियों में हैं तो आप यह कोशिश कर सकते हैं:

SET NODE_ENV=production

या आप अपना ऐप इस तरह चला सकते हैं:

NODE_ENV=production node app.js

आप इसे अपनी js फाइल में भी सेट कर सकते हैं:

process.env.NODE_ENV = 'production';

लेकिन मैं इसे आपके रनटाइम फ़ाइल में करने का सुझाव नहीं देता, क्योंकि आपके सर्वर में VIM खोलना और इसे उत्पादन में बदलना आसान नहीं है। आप अपनी निर्देशिका में एक config.json फ़ाइल बना सकते हैं और जब भी आपका ऐप चलता है, यह उससे पढ़ता है और कॉन्फ़िगरेशन सेट करता है।


12
यह बुरी सलाह है। यह मुश्किल process.env.NODE_ENVही एप्लिकेशन से मज़बूती से सेटिंग होने वाला है। डैनियल नीचे दिए गए लिंक के अनुसार अपने पर्यावरण चर को ठीक से सेट करें।
एमके सफी

15
मैं NODE_ENVहर बार जब आप ऐप चलाते हैं, तो दूसरी मिसाल ( NODE_ENV=production node app.js) के रूप में स्पष्ट रूप से सेट करने का प्रशंसक हूं । इस तरह से आप संभावित रूप से अपने आप को भविष्य में होने वाले कुछ बालों को खींचने से बचाते हैं, जिसे आप अपने स्थानीय NODE_ENVवापस सेट करना भूल जाते हैं development
जॉन

इतना शानदार नहीं है। हर बार जब आप अपना ऐप चलाते हैं तो आपको उस env var को जोड़ना होता है। वह चूसता है। नीचे बेहतर समाधान पोस्ट किया गया।
लुकास लेइसिस

2
एक साधारण क्रॉस-प्लेटफ़ॉर्म समाधान के लिए npmjs.com/package/cross-env का संदर्भ लें । cross-env NODE_ENV=productionविंडोज़ और लिनक्स / मैक पर काम करता है।
एंटोनियो

1
@ गुलेब NODE_ENV=production forever app.jsको काम करना चाहिए।
फरीद नूरी नेशत

102

in package.json:

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

फिर टर्मिनल में चलाएं:

npm start

1
पैकेजों में स्क्रिप्ट्स का एक गुच्छा डालना शुरू न करें। इसके अलावा, यह बुरा अभ्यास है क्योंकि आप असंगतता का परिचय देते हैं और यह आपकी परियोजनाओं में अपरिवर्तनीयता को मारता है। मुझे पता है कि बहुत से लोग ग्रंट या गल्प चलाने के लिए स्क्रिप्ट बनाते हैं, लेकिन ऐसा नहीं करते हैं
पॉजिटिव

38
@WeDoTDD आप किस बारे में बात कर रहे हैं? इन लिपियों का उपयोग इसी तरह किया जाता है कि मेकफाइल कैसे काम करता है। इसे इस उदाहरण के रूप में उपयोग करना या जैसा कि आपने चलाने के लिए उल्लेख किया है, एक पूरी तरह से उचित उपयोग मामला है। सरल कार्यों के लिए, मैं अब भी gulp का उपयोग नहीं करता हूं और स्क्रिप्ट के अंदर यह सब करता हूं, सामान काम करना बहुत तेज है और मैं वेबपैक को वह काम करने देता हूं जो कि gulp द्वारा किया जाता था।
Marko Grešak

15
@WTF - Package.json में लिपियों का उपयोग करने के लिए आपका क्या मतलब है "बुरा अभ्यास"? यह स्क्रिप्ट का बिंदु है: अनुभाग, स्क्रिप्ट लगाने के लिए! यह पूरी तरह से वैध है और गल्प या ग्रंट की आवश्यकता को समाप्त करता है। सभी कमांड और वेबपैक के माध्यम से किया जाता है।
तेतरादेव

6
@WTF स्क्रिप्ट का उपयोग वास्तव में स्थिरता में काफी सुधार करता है। आप कई प्रोजेक्ट में उपयोग किए जाने वाले आदेशों के एक मानक सेट को सेट कर सकते हैं जो समान अंतर्निहित स्क्रिप्ट, लाइब्रेरी आदि का उपयोग नहीं कर सकते हैं। आप कम से कम तथ्यों और उदाहरणों के साथ अपनी बात वापस करने का प्रयास कर सकते हैं।
लुईस डायमंड

4
Package.json NODE_ENV=productionमें डालने से ज्यादा समझ में नहीं आता है। रनिंग npm startविकास में उत्पादन में यह चलेंगे। आप अपना कोड इस प्रकार लिख सकते हैं जैसे कि यह हमेशा उत्पादन होता है, जब से आप इसे हमेशा चलाते हैं। ऐसा करने का एक कारण यह है कि मैं अन्य मॉड्यूल (जैसे एक्सप्रेस) को उत्पादन मोड में चलाने के लिए मजबूर करूंगा। अगर वे कभी नहीं बदलते हैं तो पर्यावरण चर का उपयोग क्यों करें?
नटोमामी

66

.envयहाँ अभी तक किसी का उल्लेख नहीं है? .envअपनी ऐप रूट में एक फ़ाइल बनाएंrequire('dotenv').config() मूल्यों को पढ़ें। आसानी से बदला, आसानी से पढ़ा, क्रॉस प्लेटफॉर्म।

https://www.npmjs.com/package/dotenv


1
अजीब कोई भी इसका उल्लेख नहीं करता है, मेरी राय में सबसे अच्छा समाधान। बाकी चर के साथ एक ही फाइल में पर्यावरण का नाम रखें।
असिनस रेक्स

2
NODE_ENV को .env फ़ाइल में सेट करने से काम नहीं चलेगा। इसे देखें: github.com/motdotla/dotenv/issues/328
माइकल ज़ेलेन्स्की

मेरे "mode": "production"लिए .envफ़ाइल में सेटिंग ने काम किया।
डार्कलाइट

46

export NODE_ENV=production बुरा समाधान है, यह पुनरारंभ होने के बाद गायब हो जाता है।

यदि आप उस चर के बारे में चिंता नहीं करना चाहते हैं - इसे इस फ़ाइल में जोड़ें:

/etc/environment

निर्यात सिंटैक्स का उपयोग न करें, बस लिखें (यदि कुछ सामग्री पहले से है तो नई पंक्ति में):

NODE_ENV=production

यह पुनः आरंभ करने के बाद काम करता है। आपको फिर से प्रवेश नहीं करना पड़ेगाअब आपको कहीं भी निर्यात NODE_ENV = उत्पादन कमांड पड़ेगा और केवल उस नोड का उपयोग करें जिसे आप चाहते हैं - हमेशा के लिए, pm2 ...

उसके लिए:

heroku config:set NODE_ENV="production"

जो वास्तव में डिफ़ॉल्ट है।


2
रख-रखाव बुरा सपना। उस बॉक्स के बारे में क्या जहां आपके पास / etc की अनुमति नहीं है?
थॉमस मैककेब

1
मैं व्यक्तिगत रूप NODE_ENV=production gulp bundle-production-appसे उत्पादन तैयार स्क्रिप्ट को बंडल करने के लिए उपयोग करता हूं , सर्वर में NODE_ENV सर्वर के वातावरण में है और देव मशीन में यह नहीं है। कुछ मशीनों में यह बुरा सपना है अगर यह सेट नहीं है और आप इसे हमेशा सेट करने की उम्मीद करते हैं । कुछ में, आप इसे नहीं करने की उम्मीद करते हैं, इसलिए आप नहीं जोड़ते हैं। वैसे भी, यूआई करते समय मैं यह स्पष्ट कर देता हूं कि अगर यह विकास मोड में है तो आपके पास कभी भी यह सवाल नहीं है कि क्या यह चालू या बंद है। यदि NODE_ENV है! == इसका उत्पादन आपके चेहरे पर है कि आप अन्य मोड में हैं, तो कोई बुरा सपना नहीं है। सब स्पष्ट, सब अच्छा।
लुकास एलिसिस

इसे कैसे बनाये रखने के बारे में बात करने के लिए +1। मुझे आश्चर्य है कि कितने लोगों ने इसे चालू सत्र में केवल यह सोचकर निर्धारित किया है कि यह जारी रहेगा। पुनरारंभ करने से पहले क्या होगा ? यदि आप इसे तुरंत सेट करना चाहते हैं, तो क्या आपको इसे अंदर रखना /etc/environment और चलाना चाहिए export NODE_ENV=production?
नटोमामी

23

चिंता करने की ज़रूरत नहीं है कि आप विंडोज, मैक या लिनक्स पर अपनी स्क्रिप्ट चला रहे हैं या क्रॉस-एनव पैकेज स्थापित करें । फिर आप अपनी स्क्रिप्ट आसानी से उपयोग कर सकते हैं, जैसे:

"scripts": {
    "start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
    "start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}

बड़े पैमाने पर इस पैकेज के डेवलपर्स के लिए सहारा।

npm install --save-dev cross-env

22
heroku config:set NODE_ENV="production"

2
आह, मुझे यही चाहिए। आप बहुत बढ़िया हैं
कॉनर लीच

5
NODE_ENV=productionअब हरोकू नोड.जेएस डिप्लॉय में डिफ़ॉल्ट है।
शॉन

1
हरकू को तैनात करने का एकमात्र स्थान नहीं है
पावन कतेपल्ली


6

पर OSX मैं जोड़ने की सलाह देते चाहते हैं export NODE_ENV=developmentकरने के लिए अपने ~/.bash_profileऔर / या ~/.bashrcऔर / या ~/.profile

व्यक्तिगत रूप से मैं उस प्रविष्टि को अपने साथ जोड़ता हूं ~/.bashrcऔर फिर ~/.bash_profile ~/.profileउस फ़ाइल की सामग्री को आयात करता हूं , इसलिए यह पूरे वातावरण में सुसंगत है।

इन अतिरिक्त बनाने के बाद, सेटिंग्स लेने के लिए अपने टर्मिनल को पुनः आरंभ करना सुनिश्चित करें।


2

अगर आप खिड़कियों पर हैं। पहले दाहिने फ़ोल्डर में अपना cmd खोलें

set node_env={your env name here}

हिट दर्ज करें फिर आप अपना नोड शुरू कर सकते हैं

node app.js

यह आपके env सेटिंग से शुरू होगा


1
पुनरारंभ होने के बाद यह गायब नहीं होगा? खिड़कियां न हों, खुद कोशिश न करें।
लुकास लीसिस

यदि आप नोड रीस्टार्ट न के बारे में पूछ रहे हैं, तो यह तब तक गायब नहीं होगा जब तक आप कमांड प्रॉम्प्ट को पूरी तरह से बंद नहीं कर देते। लेकिन अगर विंडोज सर्वर ने टो को रीस्टार्ट किया तो वह गायब हो जाएगा।
गेरिनॉन्डेम

2
ओएस के पुनः आरंभ के बारे में बात करना। यही कारण है कि मैं हर बार खिड़कियों के अपडेट को स्थापित करने से रोकने के लिए एक बेहतर तरीका ढूंढता हूं, या बस फिर से इस मुद्दे के बारे में फिर से शुरू करें।
लुकास लीजिस

2

यदि आप अपने एप्लिकेशन में वेबपैक का उपयोग कर रहे हैं, तो आप इसका उपयोग करके, बस इसे वहां सेट कर सकते हैं DefinePlugin...

तो अपने pluginअनुभाग में, NODE_ENV को यहां सेट करें production:

plugins: [
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  })
]

1

कई वातावरणों के लिए आपको (NODE_ENV पैरामीटर और निर्यात करने से पहले) सभी उत्तरों की आवश्यकता होती है, लेकिन मैं कुछ भी स्थापित किए बिना बहुत ही सरल दृष्टिकोण का उपयोग करता हूं। अपने पैकेज में.जॉन को आपकी जरूरत के अनुसार प्रत्येक स्क्रिप्ट के लिए एक स्क्रिप्ट डालें, जैसे:

...
"scripts": {
    "start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
    "start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
  }
 ...

फिर, उपयोग शुरू करने के बजाय ऐप शुरू करने के npm startलिए npm run script-prod

कोड में आप वर्तमान परिवेश तक पहुँच सकते हैं process.env.NODE_ENV

देखा।


NODE_ENV या तो "विकास" या "उत्पादन" होना चाहिए, ऊपर 3 पार्टी कोड द्वारा मान्यता प्राप्त नहीं है (हालांकि आप इसके लिए प्रक्रिया देख रहे हैं। इसके लिए वीवीएन)
वीवीएन

1

विंडोज सीएमडी -> set NODE_ENV=production

विंडोज पॉवर्सशेल -> $env:NODE_ENV="production"

मैक -> export NODE_ENV=production


0

डैनियल का एक शानदार जवाब है जो सही तैनाती (सेट और भूल) प्रक्रिया के लिए बेहतर दृष्टिकोण है।

एक्सप्रेस का उपयोग करने वालों के लिए। आप ग्रंट-एक्सप्रेस-सर्वर का उपयोग कर सकते हैं जो शानदार भी है। https://www.npmjs.org/package/grunt-express-server


0

यह एक मौका हो सकता है कि आपने सीक्वल ऑब्जेक्ट के दो उदाहरण बनाए हैं

उदाहरण के लिए: var con1 = new Sequelize (); var con2 = नया अनुक्रम ();

से भी एक ही त्रुटि होगी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.