2015-10-26 15 views
9

के साथ बिल्ड, सर्वर, क्लाइंट और साझा जावास्क्रिप्ट कोड को व्यवस्थित करने के लिए कैसे करें सर्वर पर नोडजेएस का उपयोग करने के साथ मुझे हमेशा एक बड़ा लाभ सर्वर और क्लाइंट साइड के बीच कोड के बिट्स साझा करने की क्षमता है (उदा। इनपुट सत्यापन)। अब जब मैं वास्तव में नोडजेएस का उपयोग कर विकास कर रहा हूं, मुझे मिली एक कठिनाई वह जिम्मेदारी और संदर्भ निर्धारित कर रही है जिसमें कोड के प्रत्येक निकाय को निष्पादित किया जाता है। नीचे मैं उन कुछ कठिनाइयों को सूचीबद्ध करूंगा जो उम्मीद में हैं, उन सम्मेलनों या मार्गदर्शन पर कुछ ज्ञान प्राप्त करें जो मुझे अनदेखा कर सकते हैं जो इन मुद्दों को बढ़ाने में मदद कर सकते हैं।नोडजेएस

बिल्ड समय कोड

बिल्ड समय परियोजनाओं है कि एक तरीका है कि बुनियादी दस्तावेज़ का पालन में Gulp, ग्रंट, या वेनिला NPM का उपयोग के लिए कोड आम तौर पर बहुत आसान का पालन कर रहे हैं। अधिकांश छोटी परियोजनाएं एक ही फाइल के भीतर सभी कोड को रखने के लिए होती हैं और फ़ाइल को पारंपरिक नाम जैसे gulpfile.js नाम दिया जाता है, हालांकि बड़ी परियोजनाओं के साथ मैंने देखा है कि इन स्क्रिप्ट को विभाजित करना शुरू हो गया है। मैंने कुछ मामलों को देखा है जहां गल्प फ़ाइल को कई फाइलों में विभाजित किया गया है और एक अलग निर्देशिका के तहत रखा गया है। इससे भी बदतर मुझे ऐसे मामले मिल गए हैं जहां gulpfile.js फ़ाइल को ऐसे नए डेवलपर्स के रूप में नामित नहीं किया गया है, जहां यह पता लगाने के लिए कि गुलफाइल कहाँ स्थित है और एक बार यह स्थित है, तो गल्प कमांड को हमेशा विशिष्ट के साथ चलाना होगा --gulpfile विकल्प।

भागो समय सर्वर-साइड कोड

बुनियादी नोड अनुप्रयोगों के लिए प्रवेश बिंदु केवल किसी विशिष्ट JavaScript फ़ाइल उनका कहना है जब नोड आदेश चलाकर की आवश्यकता होती है करने के लिए प्रकट (उदा। node script.js)। वेब सर्वर अनुप्रयोगों के लिए, जैसे कि Express का उपयोग करने वाले, मैंने देखा है कि सम्मेलन द्वारा प्रविष्टि बिंदु फ़ाइल को अक्सर server.js कहा जाता है और आमतौर पर एप्लिकेशन की मूल निर्देशिका में पाया जा सकता है। कुछ अन्य मामलों में हालांकि जैसे डेवलपर पर्यावरण में वेब सर्वर चलाते समय मैंने गल्प कार्यों को नोड लॉन्च करने की ज़िम्मेदारी पर देखा है। इन मामलों में प्रवेश बिंदु को शामिल करने के कई तरीके हैं लेकिन मुझे मिला एक उदाहरण वेबपैक अनुपालन शुरू कर रहा है जिसके बाद को प्रविष्टि बिंदु स्क्रिप्ट के लिए कथन की आवश्यकता है। एक विशिष्ट node debug कमांड को पूरा करने के तरीके पर सामान्य मार्गदर्शन को कैसे शामिल किया जाए, इस प्रकार के सेटअप में गैर-तुच्छ है। आवेदन के प्रवेश बिंदु के अलावा, नोडजेएस/एक्सप्रेस अनुप्रयोगों के लिए निर्देशिका संरचना पर कोई सामान्य मार्गदर्शन प्रतीत नहीं होता है जो इसे ढूंढने में सहायता के लिए सर्वर-साइड विशिष्ट कोड को रखता है और इसे बिल्ड-टाइम से अलग रखने के लिए करता है और क्लाइंट-साइड कोड।

सर्वर-साइड स्टोरी उन मामलों में और भी जटिल हो जाती है जहां सर्वर साइड कोड का उपयोग स्थिर सामग्री, सर्वर-साइड जेनरेटेड व्यू (जैसे एमवीसी के साथ) के साथ-साथ एक प्रदान करने के उद्देश्य से किया जाता है। ग्राहक पक्ष के लिए एपीआई। मेरी प्राथमिकता एपीआई को एप्लिकेशन प्रोजेक्ट से अलग करना है, लेकिन मुझे दूसरों से यह महसूस हो रहा है कि ऐसा करने में अतिसंवेदनशीलता की भावना है, जहां मैं इसे चिंताओं के उचित पृथक्करण के रूप में देखता हूं।

भागो समय क्लाइंट-साइड कोड

के बाद से क्लाइंट-साइड कोड अक्सर पहले पृष्ठ कि अनुरोध किया जाता है यह मुश्किल हो सकता है के आधार पर विभिन्न प्रवेश द्वारों हो सकता है। हालांकि यूआरएल की सामान्य पारदर्शिता के कारण वे सामान्य मामलों के लिए संसाधनों को कैसे मैप करते हैं, साथ ही साथ आधुनिक ब्राउज़र में डिबगिंग टूल कितने शक्तिशाली होते हैं, इसलिए स्क्रिप्ट के अनुसरण के बाद यह बहुत अधिक परेशानी नहीं होती है। क्लाइंट साइड कोड के बजाय मुश्किल सामान्य प्रक्रियाओं के लिए अधिक आता है जो आमतौर पर फ़ाइलों को प्रतिलिपि बनाते हैं और उन्हें एक अलग नाम के तहत संरचना जैसे उत्पादन में डाल देते हैं।एक उदाहरण एक प्रोजेक्ट होगा जिसमें src या जेएस नामक एक फ़ोल्डर होगा जिसमें क्लाइंट-साइड और सर्वर-साइड कोड इंटरमल्ड किया गया है, सिवाय इसके कि फाइलों का केवल एक हिस्सा एक बिल्ड कार्य में शामिल किया जाना चाहिए जो अक्सर बदलता है और अक्सर फ़ाइलों को जोड़ता है और उन्हें वितरण फ़ोल्डर में रखता है। कि मैंने देखा है इन वितरण फ़ोल्डरों की सामान्य नाम जिले, सार्वजनिक, www, और wwwroot हैं। अक्सर यदि ये निर्देशिका हमेशा परियोजना की जड़ पर नहीं होती है जो कम से कम निर्माण स्क्रिप्ट पूछताछ किए बिना इसे ढूंढना थोड़ा आसान बनाती है।

मेरे उम्मीद नहीं है वहाँ कैसे एक आधिकारिक स्रोत से शायद एक साथ एक समझदार रास्ते में यह सब डाल करने के लिए मुख्य रूप से अपने आप की तरह जो लोग सही तरीके से शुरू कर सकते हैं करने के लिए मार्गदर्शन देने के लिए पर कुछ सामान्य मार्गदर्शन है कि वह यह है कि । एक साइड इफेक्ट के रूप में शायद कुछ प्रकार के मानक को संदर्भित करने में सक्षम होने के बावजूद यदि यह एक ढीला है, तो बॉयलरप्लेट की मात्रा को भी कम कर सकता है, जिसकी टीम को आविष्कार करना पड़ता है और चर्चा शुरू होती है। ऊपर सूचीबद्ध प्रत्येक संदर्भ में स्पष्ट रूप से कुछ तकनीकी विशिष्ट सम्मेलन होंगे जैसे कि क्लाइंट-साइड पर एंगुलरजेएस, उल्का, या रीएक्टजेएस के लिए पीछा किया गया। जिन सम्मेलनों को मैं ढूंढ रहा हूं वे अंततः अंत जावास्क्रिप्ट अनुप्रयोगों में मुख्य हाईलेवल संदर्भों को अलग करने के लिए अधिक विशिष्ट हैं, जहां भाषा और प्लेटफॉर्म अब प्रत्येक के बीच अंतर करने के लिए स्पष्ट तरीका नहीं बनता है।

+0

शायद आधिकारिक से दूर, मैंने इस जिथब परियोजना में ठोकर खाई है जो बड़े नोडजेएस ऐप्स के लिए संभावित लेआउट पर चर्चा करता है। https://gist.github.com/lancejpollard/1398757 – jpierson

उत्तर

6

बिल्ड समय कोड

IMHO अगर आप इतना निर्माण समय कोड है कि यह तुलना में कहते हैं कि 1000 लाइनों अधिक है और फ़ाइलों का एक मुट्ठी भर से अधिक की आवश्यकता है है, कुछ रेल बंद हो गई है। या तो आप नहीं जानते कि मौजूदा पैकेजों का एनपीएम से अच्छा उपयोग कैसे किया जाए या आप समझ में नहीं आते कि जेनेरिक कोड को कैसे रेफैक्टर करना है और स्वतंत्र एनपीएम पैकेज के रूप में प्रकाशित करना है। यदि आपको लगता है कि आपको किसी परियोजना के बिल्ड-टाइम कोड के बारे में मार्गदर्शन की आवश्यकता है क्योंकि यह इतना बड़ा और जटिल है, तो मेरा सुझाव अलग-अलग परियोजनाओं में मॉड्यूलर और विभाजित करना है - प्रत्येक स्वतंत्र रूप से एनपीएम पर प्रकाशित होता है। इसके अलावा बस अपना समग्र दृष्टिकोण देखें। आप क्या कर रहे हैं जो इतना कस्टम है और इतनी मशीनरी की आवश्यकता है?

भागो समय सर्वर साइड कोड

कृपया देखें ExpressJS How to structure an application?

आम तौर पर मैं नहीं बल्कि देखना चाहते हैं क्लाइंट पक्ष कोड और सर्वर साइड कोड या तो पूरी तरह से अलग NPM पैकेज (अलग Git रेपोस करने के लिए अपने अन्य जवाब है, अलग पैकेज.जेसन फाइलें, स्वतंत्र रूप से प्रकाशित) (यदि वे काफी बड़ी हैं) या अन्यथा एक ही मॉड्यूल में सह-मिलकर मिलते हैं और युग्मन द्वारा समूहीकृत (फ्रंट और बैक एंड कोड सहित एक सुविधा से संबंधित सभी कोड), खासकर यदि आपका कोड बेस में पर्याप्त मात्रा में कोड होता है जो दोनों वातावरण में काम करता है।

मेरे पास एक ओपन-सोर्स फुल-स्टैक नोड/जेएस एप्लीकेशन है जिसे mjournal कहा जाता है जो ब्राउज़र कोड और नोड कोड को एक-दूसरे के साथ रखता है। आप देख सकते हैं और देख सकते हैं कि यह आपके लिए तार्किक लगता है और यह समझने में आसान है कि कोड कहां रहता है। यह किसी भी तरह से एक लोकप्रिय दृष्टिकोण नहीं है, इसलिए बहुत से लोग इसे नापसंद करेंगे, लेकिन यह मेरे लिए अच्छा लगता है क्योंकि मैंने एक सामान्य सिद्धांत के रूप में "युग्मन द्वारा समूह" को गले लगा लिया है।

इसके बारे में पता कैसे कैसे एक ठेठ नोड डिबग आदेश को पूरा करने पर सामान्य मार्गदर्शन शामिल करने के लिए इस प्रकार के सेटअप

हाँ, यह बकवास है में गैर तुच्छ है। आपका ऐप npm start या node server.js जैसे कुछ से शुरू होना चाहिए।नए डेवलपर्स को भ्रमित करने वाले विस्तृत गल्प/ग्रंट सेटअप अनावश्यक जटिलता हैं जिन्हें आपको अभी खत्म करना चाहिए।

जहां सर्वर साइड कोड स्थैतिक सामग्री

ऊपर की सेवा मेरे अनुभव में के लिए उद्देश्य के लिए प्रयोग किया जाता है दोनों सर्वर साइड कहानी और भी अधिक मामलों में जटिल हो जाता है, कोड स्थैतिक सामग्री को सर्व करने की 5 लाइनों या उससे कम तक फोड़ा जाता है, इसलिए कोई बड़ा सौदा नहीं होता है। यदि आपके पास स्थैतिक सामग्री की सेवा करने से संबंधित कोड की एक गैर-सूक्ष्म मात्रा है, तो फिर रेल से कुछ निकल गया है।

भागो समय क्लाइंट साइड कोड

मेरे उम्मीद नहीं है मुख्य रूप से देने के लिए कैसे एक आधिकारिक स्रोत से शायद एक साथ एक समझदार रास्ते में यह सब डाल करने के लिए पर कुछ सामान्य मार्गदर्शन है कि वहाँ कि है मेरे जैसे लोगों को मार्गदर्शन जो सही पैर पर शुरू करना चाहते हैं।

नोड समुदाय में कुछ लोग हैं जिन्होंने रूबी, एम्बरजेएस और कुछ अन्य बड़ी परियोजनाओं पर रूबी द्वारा उपयोग में "कॉन्फ़िगरेशन पर सम्मेलन" दृष्टिकोण अपनाया है। यदि आप उस दृष्टिकोण को पसंद करते हैं, तो इसका उपयोग करने वाले टूल देखें, जैसे कि सेलसजेएस, एम्बरजेएस, यमन जनरेटर इत्यादि।

लेकिन आम तौर पर, "मानक" की तलाश करना नहीं है कि node.js/जावास्क्रिप्ट/वेब समुदाय कैसे रोल करता है। छोटे एनपीएम पैकेज। फाइल लेआउट जो छोटीपन के कारण स्पष्टता में मजबूर हो जाते हैं। मुझे यहां आपकी निराशा होती है क्योंकि फ्रंट एंड टूलचेन्स बहुत जटिल हैं, लेकिन आखिरकार ऐसा इसलिए है क्योंकि ब्राउजर में जावास्क्रिप्ट ने उचित मॉड्यूल सिस्टम बनाने के लिए कई दशकों का समय लिया। चीजें अगले कुछ सालों में मानकीकृत करना शुरू कर सकती हैं कि ईएस 6 मॉड्यूल एक आधिकारिक विशिष्टता है, लेकिन कॉमनजेएस में पहले से ही बहुत सारे कोड लिखे गए हैं और यह आवश्यकताजेएस/एएमडी जैसे भयानक अग्रदूत हैं, हम शायद निकट भविष्य के लिए उनके साथ काम करेंगे।

+0

"मेरे अनुभव में, स्थैतिक सामग्री को पूरा करने के लिए कोड 5 लाइनों या उससे कम तक उबाल जाता है" बहुत बढ़िया, हालांकि यह जानना महत्वपूर्ण है। नोड में एक नए डेवलपर के लिए यह स्पष्ट नहीं हो सकता कि किस कोड की ज़िम्मेदारी थी। मैं वेब सामग्री को निर्दिष्ट करने के लिए अपने प्रश्न को संशोधित करूंगा, ऐसे विचारों को केवल स्थिर सामग्री के बजाय एमवीसी स्टाइल कोड के साथ लौटाया गया है। मैं व्यक्तिगत रूप से आइसोमोर्फिक दृष्टिकोण के अलावा सर्वर पक्ष उत्पन्न विचारों से बचने का प्रयास करता हूं लेकिन यह बिंदु के बगल में है। – jpierson

+0

प्रोजेक्ट कोड व्यवस्थित करने के मामले में आप मॉड्यूल शब्द का उपयोग करते हैं। मैं एनपीएम से सार्वजनिक पैकेजों के पुन: उपयोग की इकाई के रूप में मॉड्यूल की अवधारणा से परिचित हूं और निजी साझा मॉड्यूल की अवधारणा में संक्षेप में देखा है, लेकिन मुझे नोडजेएस के संगठन को बेहतर बनाने के लिए मॉड्यूल के उपयोग पर अभी तक कोई जानकारी नहीं मिली है वेब एप्लीकेशन। क्या आप विस्तारित कर सकते हैं? यह सलाह की लापता बिट हो सकती है जिसे मैं ढूंढ रहा हूं। – jpierson

+1

जब मैं कहता हूं कि "अपने स्वयं के मॉड्यूल में चीजों को विभाजित करें" मेरा मतलब है कि उन्हें अपनी खुद की गिट रिपोजिटरी, अपनी पैकेज.जेसन फ़ाइल दें, और उन्हें स्टैंडअलोन मॉड्यूल के रूप में एनपीएम पर प्रकाशित करें। मैं वापस जाउंगा और "एनजेपी पैकेज" से "कॉमनजेएस मॉड्यूल" को अलग करने के लिए शब्दावली को स्पष्ट करूंगा। –