Node.js + एक्सप्रेस वेब एप्लिकेशन को पैकेज और परिनियोजित कैसे करें?


83

मैं Node.js प्रोग्रामिंग के लिए नया हूं और मैंने हाल ही में एक नमूना कामकाजी वेब एप्लिकेशन का उपयोग करके बनाया है (एक्सप्रेस, बैकबोन और अन्य मानार्थ दृश्य तकनीकों के साथ, मोंगोडीबी के साथ)। अब मैं एक ऐसे बिंदु पर हूं जहां मैं एक मंचन के माहौल पर समान तैनात करना चाहता हूं और मुझे यकीन नहीं है कि इस एप्लिकेशन को कैसे पैकेज करें और उसी को वितरित करें। [मैं mongoDb की देखभाल कर सकता हूं और इसे अलग से सेट कर सकता हूं]

मैं जावा दुनिया से हूं और वहां हम वेब एप्लिकेशन के लिए पुन: प्रयोज्य कार्यों और युद्ध / कान पैकेज के लिए जार बनाते हैं जो एक सर्वलेट कंटेनर में तैनात किया जाता है। अब इस मामले के बाद से नोड.जेएस खुद एक वेब कंटेनर के रूप में भी काम करता है, मैं अपने वेबप को कैसे पैकेज करूं?

  1. एक्सप्रेस के उपयोग से निर्मित नोड नोड की पैकेजिंग का कोई मानक प्रारूप / दिशानिर्देश है? (क्या नोड ऐप्स के लिए एक समान जार / युद्ध पैकेजिंग सिस्टम है?)
  2. एक बार पैक होने के बाद मैं इसे कैसे लागू करूं? क्या यह एक निर्वासित बन जाएगा, क्योंकि यह भी अपना कंटेनर है?

पुनश्च: अब तक मैं केवल सभी आवश्यक स्रोत फ़ाइलों को मचान वातावरण में कॉपी करने के बारे में सोच रहा हूं और उस मशीन पर सभी निर्भरताएं डाउनलोड करने के लिए npm कमांड चलाता हूं और फिर अपने सर्वर को चलाने के लिए 'हमेशा के लिए' या किसी अन्य तंत्र का उपयोग करता हूं। (इसके अलावा, कुछ प्रकार की निगरानी जोड़ें, बस मामले में दुर्घटनाग्रस्त हो जाती है और हमेशा के लिए विफल हो जाती है) मुझे यकीन नहीं है कि क्या यह सही तरीका है? मुझे यकीन है कि इस समस्या के समाधान के लिए कुछ मानकीकृत तरीका होना चाहिए।


मेरी जावा परियोजनाओं के लिए हम मावेन का निर्माण / परिनियोजन उपकरण के रूप में करते हैं। अतीत में, मैं भी चींटी के साथ अनुभव किया है। मैंने Node.js के लिए ग्रंट को देखा, लेकिन मैं अपने कार्यों से समझ सकता था कि, यह प्रीप्रोसेसिंग कार्य करता है (जैसे कि मिनिफिकेशन, कॉनसैट, JSHint आदि ..), इसमें ऐप की पैकेजिंग के बारे में कुछ भी उल्लेख नहीं किया गया और फिर इंस्टॉल करना एक भंडार में (जैसे मावेन कैसे करता है)।
KBJ

जवाबों:


45

कोई मानकीकृत तरीका नहीं है, लेकिन आप सही रास्ते पर हैं। यदि आपकी package.jsonतारीख तक और अच्छी तरह से रखा गया है, तो आप अपवर्जन को छोड़कर अपनी एप्लिकेशन निर्देशिका को उत्पादन प्रणाली में कॉपी / ज़िप / क्लोन कर सकते हैं node_modules

अपनी उत्पादन प्रणाली पर, npm installअपनी निर्भरताएँ स्थापित करने के लिए दौड़ें ,npm test यदि आपके पास परीक्षण हैं और अंत में हैंNODE_ENV=production node server.js

हाल ही में आई कुछ स्लाइड्स को मैंने काफी मददगार माना है, जिसमें हमेशा की तरह रैपर का विषय भी शामिल है, यहाँ पाया जा सकता है


ऐसी विलंबित प्रतिक्रिया के लिए क्षमा करें। मैंने सभी संभावित संयोजनों को आज़माने के बाद, उपरोक्त सुझाव के साथ खुद को समाप्त कर लिया। धन्यवाद!
KBJ

5
क्या होगा अगर मैं इंटरनेट से मॉड्यूल डाउनलोड करने के लिए npm नहीं चाहता हूं। इसके बजाय मैं पैकेज के भीतर सब कुछ जहाज करना चाहता हूं। क्या नोड_मॉड्यूल फ़ोल्डर को भी जहाज करना संभव है? क्या यह काम करता है? मेरे द्वारा पूछे जाने का कारण यह है: मेरा एप्लिकेशन इंटरनेट कनेक्शन के बिना इंट्रानेट वातावरण में चल सकता है।
स्टीफन

2
@Stefan उस मॉड्यूल पर निर्भर करता है जिसे आप इसके साथ शिप करते हैं। चूंकि कुछ मॉड्यूल जो शुद्ध जेएस नहीं हैं, उन्हें पहले निर्मित करने की आवश्यकता है, यह हो सकता है कि उन्हें एक अलग वातावरण में स्थानांतरित करना उन्हें तोड़ सकता है। मुझे अभी तक इसका सामना नहीं करना पड़ा है, लेकिन शायद npm कैश का उपयोग करके संकुल की पूरी सूची के साथ कैश को पॉप्युलेट करके एक व्यवहार्य समाधान प्रदान करता है, फिर उसी से इंस्टॉल (और बिल्डिंग) करता है।
माइल्डलीसियस

89

Node.jsअनुप्रयोगों को तैनात करना बहुत आसान सामान है। मावेन में है pom.xml। में संबंधित अवधारणा Node.jsहै package.json। आप अपनी निर्भरता को बता सकते हैं package.json। आप पर्यावरण सेटअप पर भी कर सकते हैं package.json। उदाहरण के लिए, देव परिवेश में आप ऐसा कह सकते हैं

मैं यूनिट परीक्षण चलाना चाहता हूं।

लेकिन उत्पादन में;

मैं यूनिट परीक्षण छोड़ना चाहता हूं।

आपके पास .m2फ़ोल्डर के तहत मावेन के लिए स्थानीय रिपॉजिटरी हैं । Node.js में, node_modulesआपके Node.js प्रोजेक्ट के अंतर्गत फ़ोल्डर है। आप इसके नाम के साथ मॉड्यूल फ़ोल्डर देख सकते हैं।

आइए gruntइस उत्तर के हिस्से में आते हैं । Gruntआपके सामने की संपत्ति, HTML, जावास्क्रिप्ट, सीएसएस के लिए एक कार्य प्रबंधक है। उदाहरण के लिए, परिनियोजन से पहले आप html, css, जावास्क्रिप्ट यहां तक ​​कि छवियों को भी छोटा कर सकते हैं। आप gruntटास्क रन फ़ंक्शंस भी डाल सकते हैं package.json

यदि आप एक नमूना आवेदन को देखना चाहते हैं, तो आप यहां एक उदाहरण ब्लॉग अनुप्रयोग पा सकते हैं । फ़ोल्डर संरचना और package.jsonसंदर्भ के लिए जाँच करें ।

परिनियोजन के लिए, मैं आपको सुझाव देता हूं कि स्टार्टअप तालियों के लिए परिनियोजन तैनाती। आप यहाँ पर पा सकते हैं । यह सरल गिट आधारित तैनाती है।

प्रोजेक्ट रनिंग पार्ट पर, बस अपना वातावरण NODE_ENV=developmentऔर सेट करें node app.js। यहाँ app.jsआपके प्रोजेक्ट में है।

यहाँ जावा और नोडज के लिए सापेक्ष अवधारणा है;

  1. maven clean install => npm install
  2. .m2फ़ोल्डर => node_modules(प्रोजेक्ट फ़ोल्डर के तहत)
  3. mvn test=> npm test(परीक्षण अनुभाग पर package.json)
  4. junit, powermock... => मोचा , नोड-यूनिट , ...
  5. Spring MVC=> एक्सप्रेस.जेएस
  6. pom.xml => package.json
  7. import package => require('module_name')

बहुत उपयोगी। Package.json में, निर्भरता में परिवर्तन के कारण ब्रेकिंग की संभावना को कम करने के लिए संस्करण को निर्दिष्ट करने का एक तरीका है?
मिकिजॉव

2
@MikiJ यकीन है, आप मॉड्यूल (निर्भरता) के लिए संस्करण निर्दिष्ट कर सकते हैं। सिमेंटिक संस्करण का उपयोग पैकेज में किया जाता है। आगजनी, आप अधिक जानकारी के लिए यहाँ देख सकते हैं
हुसैन बाबैल

अच्छा जावा - नोड तुलना। महान!! धन्यवाद!!
एलेजांद्रो टेइक्सेरा मुअनोज़

महान।!! क्या जावा में युद्ध फ़ाइल के बराबर कुछ है? क्योंकि हम स्रोत फ़ाइल के बजाय केवल वर्ग फ़ाइलों को तैनात करेंगे, क्या पूरे जेएस फ़ाइलों को तैनात करने के बजाय नोड में ऐसा कुछ है।
मादुमनोज

@ HüseyinBABAL आपकी उपमा पूरी तरह से सही नहीं है। क्योंकि mvn clean installबंडल्ड .war फ़ाइल बनाता है जिसे आसानी से दुनिया के किसी भी सर्वर पर तैनात किया जा सकता है और java -jar *.warइसे सर्वर में निष्पादित किया जा सकता है। लेकिन मैं अपने नोड प्रोजेक्ट के लिए एक बंडल फाइल कैसे बना सकता हूं !! और मैं इसे सर्वर में कैसे निष्पादित कर सकता हूँ !!
KNDheeraj

6
  1. एक्सप्रेस के उपयोग से निर्मित नोड नोड की पैकेजिंग का कोई मानक प्रारूप / दिशानिर्देश है? (क्या नोड ऐप्स के लिए एक समान जार / युद्ध पैकेजिंग सिस्टम है?)

हाँ, CommonJS पैकेज विनिर्देश :

इस विनिर्देशन में कॉमनजेएस कार्यक्रमों और पुस्तकालयों को वितरित करने के लिए कॉमन जेएसएस पैकेज प्रारूप का वर्णन किया गया है। कॉमनजेएस पैकेज एक एकल रूप में मॉड्यूल, कोड और अन्य परिसंपत्तियों के संग्रह का एक सुसंगत आवरण है। यह कॉमन जेजेएस घटकों के सुविधाजनक वितरण, स्थापना और प्रबंधन के लिए आधार प्रदान करता है।

आपके अगले प्रश्न के लिए:

2. एक बार पैक होने के बाद मैं इसे कैसे तैनात करूं? क्या यह एक निर्वासित बन जाएगा, क्योंकि यह भी अपना कंटेनर है?

मैं उत्पादन के लिए हरकू पर तैनात करने के लिए हुसेन का दूसरा सुझाव देता हूं । विकास और मंचन के लिए मैं क्रमशः VirtualBox और Amazon EC2 के साथ नोड-एप्लायंस का उपयोग करता हूं :

यह प्रोग्राम बिल्ड-डेबियन-क्लाउड या डेबियन-वर्चुअलबॉक्स-एप्लाइंसेज द्वारा निर्मित डेबियन मशीन लेता है और इसे Node.js "उपकरण" में बदल देता है, जो git के माध्यम से तैनात नोड एप्लिकेशन को चलाने में सक्षम है।

आपका webapp एक नहीं हो जाएगा exe


1
केवल दागी सवाल का जवाब देने से ज्यादा कुछ नहीं करने के लिए धन्यवाद।
मोनस्टो

6

आशा है कि यह किसी को समाधान की तलाश में मददगार हो सकता है, Node js ऐप्स की पैकेजिंग "npm पैक" कमांड का उपयोग करके की जा सकती है। यह आपके एप्लिकेशन की एक ज़िप फ़ाइल बनाता है जिसे उत्पादन / स्टेजिंग वातावरण में चलाया जा सकता है।


5

इससे निपटने के कुछ तरीके:

  • अपने कोड को Git रिपॉजिटरी में पुश करें, वह सब कुछ छोड़कर जो आपका कोड नहीं है ( node_modules/**), फिर इसे अपने स्टेजिंग वातावरण में खींचें, npm installसभी निर्भरताओं को पुनर्स्थापित करने के लिए चलाएं

  • इसमें से एक एनपीएम पैकेज बनाएं, इसे npmअपने मंचन के वातावरण में स्थापित करें (यह सभी निर्भरता का भी ध्यान रखना चाहिए)

  • अपने मंचन पर्यावरण के लिए मैनुअल कॉपी / ssh फ़ाइलों (यह के साथ स्वचालित किया जा सकता है Grunt), के माध्यम से अपनी निर्भरता को बहाल करने की तुलना मेंnpm


2

मैंने zeit के pkg मॉड्यूल का उपयोग किया। यह linux / win / macos के लिए क्रॉस प्लेटफॉर्म डिलिवरेबल्स बना सकता है। वास्तव में इसका उपयोग उत्पादन में किया जाता है और बिना किसी मुद्दे के ठीक काम करता है।

यह सभी js स्क्रिप्ट्स में लेता है और इसे सिंगल फाइल में पैकेज करता है।

मैंने इसका उपयोग इसलिए किया क्योंकि यह आपके स्रोत कोड को सुरक्षित करने में मदद करता है। ग्राहकों के वातावरण में उत्पादन के तरीके से उनके पास एप्लिकेशन तक पहुंच होगी, लेकिन स्रोत कोड नहीं।

इसके अलावा एक फायदा यह है कि उत्पादन के माहौल में, आपको वास्तव में ग्राहक को नोड स्थापित करने की आवश्यकता नहीं है। क्योंकि नोड बायनेरिज़ भी बिल्ड के अंदर पैक किए जाते हैं।

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

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