2016-04-21 5 views
5

पास से या प्रक्रिया process.env चर का उपयोग करें। मैं process.env चर को नोड से रिस्पॉज तक कैसे पास या उपयोग कर सकता हूं? उदाहरण के लिए मैं इसनोड से रिस्पॉज

const nodeEnv = process.env.NODE_ENV || 'development'

मेरे विकास में

है और यह काम करता है (मुझे लगता है कि क्योंकि यह विकास है और मैं क्या एक fallback 'development' है।

लेकिन हम हमारे मचान सर्वर पर धक्का जब और NODE_ENV सेट परिवर्तनीय, यह केवल लोड होने पर पहली बार काम करता है लेकिन बाद में ऐसा नहीं होता है। मुझे लगता है कि मुझे यह मिलता है क्योंकि पहले इसे नोड द्वारा परोसा जाता है और इसके पास सर्वर चरों तक पहुंच होती है लेकिन बाद में यह पेजों की सेवा करने वाले रिस्पॉज होगा (दाएं?) और उसके पास सर्वर सामान तक पहुंच नहीं होगी। तो मुझे बिना किसी हार्डकोडिंग के प्रतिक्रियाओं के लिए चर कैसे प्राप्त हो सकता है (क्योंकि हम अंततः एक उत्पादन के लिए अलग सेट)?

संपादित करें। यदि इसका कोई फर्क पड़ता है तो हम वेबपैक का भी उपयोग करते हैं।

उत्तर

5

1min खोज गूगल और मैं इस पाया: http://dev.topheman.com/make-your-react-production-minified-version-with-webpack/

module.exports = { 
    //... 
    plugins:[ 
    new webpack.DefinePlugin({ 
     'process.env':{ 
     'NODE_ENV': JSON.stringify('production') 
     } 
    }), 
    // [...] 
    ] 
    //... 
} 

मेरी राय में यह वास्तव में आप क्या खोज रहे हैं।

+0

हाँ। मैंने यह भी देखा है लेकिन सोच रहा था क्योंकि यह क्या करता है मुझे लगता है कि स्ट्रिंग को सीधे निर्माण में बदल दें? क्या इसका मतलब है कि मुझे इसे धक्का देने के बजाय सर्वर में निर्माण करना होगा? क्या यह एकमात्र तरीका है? – index

+0

हां, आपको यह निश्चित रूप से सर्वर पक्ष (वेब ​​पैक के साथ) पर करना है। यदि आप क्लाइंट पक्ष पर ऐसा करना चाहते हैं तो आपको अपने स्रोत कोड में मैन्युअल रूप से node_env चर जोड़ना होगा। शायद एक और तरीका है, लेकिन आप एक और तरीके क्यों खोज रहे हैं? शायद यह मदद करता है अगर आप समझते हैं कि आप एक और समाधान क्यों खोज रहे हैं। – CapCa

+0

मेरा मतलब है, मुझे अपने विकास कंप्यूटर के बजाय हमारे स्टेजिंग सर्वर पर 'webpack -w' चलाने की आवश्यकता है। मैं बस अपने विकास पर जितना संभव हो सब कुछ करना चाहता हूं, मैं सर्वर में मास्टर नहीं हूं। लेकिन अगर इसकी ज़रूरत है, तो उसे तब करना होगा। क्या इसका मतलब यह है कि मेरे पास प्रत्येक सर्वर के लिए अलग वेबपैक कॉन्फ़िगरेशन है जिसे मैं तैनात करता हूं? – index

6

वेबपैक ने इसके लिए EnvironmentPlugin भी परिभाषित किया है। बस पर्यावरण परिवर्तनीय नामों की एक सरणी प्रदान करें और वे ग्राहक में पहुंच योग्य होंगे।

plugins: [ 
    new webpack.EnvironmentPlugin([ 
    'NODE_ENV', 
    'SOME_OTHER_KEY' 
    ]) 
] 
+0

यह बहुत अच्छा काम करता है। '' 'वेबपैक के लिए इसे एक स्थान के रूप में उपयोग करने के लिए आपकी कहानियां। डीफिनप्लगिन ({'process.env.NODE_ENV: ...})' '', है ना? – Scott

+0

हाँ, यह आपके लिए इसे संभालता है। तो उपरोक्त कोड नमूना 'process.env.NODE_ENV' और 'process.env.SOME_OTHER_KEY' तक पहुंच प्रदान करता है – Cristi

संबंधित मुद्दे