2012-05-14 3 views
6

मैं जेएस समुदाय में अपने जेएस पुस्तकालयों के साथ नोड.जेएस और एनपीएम का उपयोग करके वास्तव में उलझन में हूं। हमें ऐसे चरम उपायों का सहारा क्यों लेना है? हमारे लिए यह समस्या क्या हल कर रही है?जावास्क्रिप्ट पुस्तकालयों को संकलित करने के लिए सभी लोग नोड.जेएस और एनपीएम का उपयोग क्यों कर रहे हैं?

[संपादित करें] मुझे लगता है कि मेरा प्रश्न बिंदु पर नहीं था।

  1. फ़्रेमवर्क Ember.js, Batman.js और हाल ही में याहू के Mojito की तरह मुझे Node.js उपयोग करने के लिए आवश्यकता होती है - क्यों Node.js और NPM पर इस निर्भरता?
  2. हम चीजों को जटिल क्यों बना रहे हैं? "अगर आपके पास पहले से नहीं है, तो आपको node.js इंस्टॉल करने की आवश्यकता होगी ..." आप इस तरह के संदेश पढ़ते हैं और आप बंद कर दिए जाते हैं।

क्यों? जेएस में पहले से ही बहुत सारी समस्याएं हैं - जेएस libs के रिकॉर्ड से जाने के लिए बहुत से सक्रिय जेएस libs/ढांचे का चयन करने के लिए सबसे अधिक जल्द ही निष्क्रिय हो जाएगा। इसके लिए बहुत सारी चीजें हैं जिनकी वजह से ऐप - निर्भरता प्रबंधन, राउटर, एमवीसी, टेम्पलेटिंग इत्यादि में कई ढांचे का परिणाम होता है। इसके ऊपर हम इन libs/frameworks का उपयोग करने के लिए Node.js का उपयोग कर रहे हैं ... कैसे क्या इन पुस्तकालयों के नए जेएस डेवलपर्स के लिए यह पुश उपयोग होगा? जेएस आसान था!

+3

क्या "चरम उपायों"? –

+12

मैं अपने जावास्क्रिप्ट पुस्तकालयों के साथ नोड.जेएस और एनपीएम का उपयोग नहीं कर रहा हूं। इसलिए मैं दावा करता हूं कि आपका ∀ दावा गलत है। – Pointy

+0

मुझे * संकलन * भाग नहीं मिलता है, क्या आपका मतलब कॉफ़ीस्क्रिप्ट है और इसके समान है? क्या आप उस अर्थ में संकलन का मतलब था? – Joseph

उत्तर

11

"यदि आपके पास पहले से नहीं है, तो आपको node.js इंस्टॉल करने की आवश्यकता होगी ..." आप इस तरह के संदेश पढ़ते हैं और आप बंद कर दिए जाते हैं। क्यूं कर?

नोडजेएस Google का वी 8 "अपने आप पर चल रहा है"। यह एक अतिरिक्त जेएस इंजन है जिसमें अतिरिक्त निम्न-स्तरीय एपीआई (नेटवर्क, आई/ओ, आदि) है। नोडजेएस जेएस डेवलपर्स के लिए "लापता प्लेटफ़ॉर्म" प्रदान करता है, जो ब्राउज़र पर काम करने के लिए सीमित थे।

यह नोड.जेएस और एनपीएम पर निर्भरता क्यों है?

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

दूसरी ओर, एनडीएम, नोड.जेएस पैकेज प्रबंधक है। यह एक ऐसा प्रोग्राम है जो आपके द्वारा उपयोग किए जाने वाले मॉड्यूल का प्रबंधन करता है। अपने मॉड्यूल को मैन्युअल रूप से सूचीबद्ध करने की आवश्यकता नहीं है, और जब आप कहीं और विकसित करते हैं तो उन्हें याद रखने की आवश्यकता नहीं है। जब तक आपके पास पैकेज सूची एनपीएम आपके लिए बनाई गई हो, तब तक पुनर्स्थापित करना npm install का मामला है।

हम चीजों को जटिल क्यों बना रहे हैं?

हम नहीं हैं। वास्तव में, हम उन्हें डेवलपर्स के लिए आसान बना रहे हैं। अपने वर्कफ़्लो पर चिंता करने, अपने पुस्तकालयों को प्रबंधित करने या मैन्युअल रूप से सामान करने के बजाय, आप इन कार्यों को एनपीएम पर मौजूद कुछ मॉड्यूल में बंद कर सकते हैं। फिर आप केवल उस पर ध्यान केंद्रित कर सकते हैं जो आप वास्तव में कर रहे हैं।

इस पर हम इन libs/ढांचे का उपयोग करने के लिए Node.js का उपयोग कर रहे हैं ... इन पुस्तकालयों के नए जेएस डेवलपर्स के लिए यह कैसे उपयोग करेगा? जेएस आसान था!

जैसा ऊपर बताया गया है, नोडजेएस एक बहुमुखी मंच है। इसका उपयोग एक सर्वर (कनेक्ट, एक्सप्रेस), एक स्वचालन उपकरण (ग्रंट), एक पैकेज प्रबंधन प्रणाली (एनपीएम, बोवर इत्यादि का उपयोग करके), एक परीक्षण प्लेटफॉर्म (क्विनीट, मोचा), प्रॉक्सी, गेम सर्वर, चैट बॉट के रूप में किया जा सकता है ।

और यह विशेष रूप से जेएस डेवलपर के लिए फायदेमंद है, क्योंकि ये जेएस में संभव नहीं थे।

वहां पहले से ही जे एस में बहुत की एक समस्या है - अभी तक भी कई सक्रिय जे एस libs/चौखटे से चुनने के लिए - जे एस libs के रिकॉर्ड को देखते हुए सबसे जल्द ही निष्क्रिय हो जाएगा। वहाँ अभी भी कई चीजें हैं जो देखने के लिए अक्सर एक एप्लिकेशन में एकाधिक चौखटे में परिणाम कर रहे हैं - निर्भरता प्रबंधन, राउटर, MVC, templating, आदि

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

डेवलपर्स जेएस क्विर्क को सामान्यीकृत करके अन्य डेवलपर्स के लिए जीवन को आसान बनाने के लिए काम पर कड़ी मेहनत कर रहे हैं (क्योंकि ब्राउज़र विक्रेता सिर्फ मानक मानकों की सही चीज़ नहीं कर सकते हैं) और उनमें से अधिकतर स्वेच्छा से मुफ्त बियर की तरह किए जाते हैं - आपको इसके लिए खुश होना चाहिए। इसके अलावा, कोई भी आपको किसी भी तरह का उपयोग करने के लिए मजबूर नहीं कर रहा है।

+0

हालांकि मैं अन्य "नहीं-सी-जावास्क्रिप्ट" भाषाएं लेता हूं, लेकिन प्रत्येक (या उसके) के लिए ;-) –

+3

यह सच हो सकता है, लेकिन यह "जावास्क्रिप्ट पुस्तकालयों को संकलित करने" के लिए एक उपकरण नहीं है। – Pointy

+0

धन्यवाद! प्रश्न पोस्ट करने के बाद से मैंने संकलन के लिए एएमडी और नोड जेएस का उपयोग कर एक जेएस प्रोजेक्ट बनाया है। –

1

अक्सर आपको अपने जावास्क्रिप्ट के विभिन्न निर्माण की आवश्यकता होती है। आम तौर पर यह विभिन्न फाइलों में फैलता है, कभी-कभी इसकी कॉफ़ीस्क्रिप्ट में। आप अक्सर एक एएमडी संगत निर्माण, साथ ही साथ कॉमनजेएस एक बनाना चाहते हैं, साथ ही नियमित रूप से न्यूनतम और अनियमित निर्माण भी करना चाहते हैं।

निर्भरता संकल्प की संभावना भी है।

मैं भी एक पुस्तकालय है कि jQuery और protoype के लिए एक निर्माण किया था देखा है ...

+0

धन्यवाद! प्रश्न पोस्ट करने के बाद से मैंने संकलन के लिए एएमडी और नोड जेएस का उपयोग कर एक जेएस प्रोजेक्ट बनाया है। –

1

संपादित करें: देखा मैं सवाल का जवाब दिया गया था के रूप में सवाल शरीर में शब्दों, लेकिन शीर्षक में संकलन प्रश्न याद किया।

इस "चरम उपाय" पर विचार करने के लिए आपके पास क्या मानदंड है? स्वच्छ, आसान पढ़ने/लिखने के कोड लिखने के लिए यह वर्षों से किया गया है, लेकिन ऑन-द-वायर ट्रांसफर (और शायद अन्य अनुकूलन) के लिए अनुकूलित करने के लिए प्रीकंपिल्ड किया गया है। Node.js इसके लिए एक अच्छा समाधान बनाता है, क्योंकि यह जावास्क्रिप्ट का उपयोग भी कर रहा है और इसलिए इसका उपयोग जावास्क्रिप्ट कोड को संकलित करने के लिए लोगों से परिचित है। पहले यह आमतौर पर पाइथन जैसे कुछ में किया जाता था, जो काम करता है, एक आम भाषा के साथ चिपके रहने से मुझे कम कामुक लगता है।

+0

धन्यवाद! प्रश्न पोस्ट करने के बाद से मैंने संकलन के लिए एएमडी और नोड जेएस का उपयोग कर एक जेएस प्रोजेक्ट बनाया है। –

5

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

  • यूनिक्स शैली "एक काम करते हैं और यह अच्छी तरह से करना" पुस्तकालयों है कि छोटे और भारी कीड़े के खिलाफ परीक्षण कर रहे हैं, जो आसानी से जोड़ा जा सकता है (कोई नामस्थान समस्या नहीं है) अपने विशेष कार्य को हल करने के लिए।
  • ओपन सोर्स मॉड्यूल (सीपीएएन, एनपीएम, आदि) का केंद्रीय भंडार जो आप आसानी से मॉड्यूल खींच सकते हैं (एनपीएम सभी संस्करणों को उपलब्ध रखकर इसे एक स्तर ऊपर ले जाता है, ताकि आप निर्दिष्ट कर सकें कि आपका कोड उपयोग करता है आखिरी ज्ञात "अच्छा" संस्करण उम्मीद के बजाय कि जब आप ला सीपीएएन को फिर से तैनात करते हैं तो कुछ भी नहीं तोड़ दिया)।
  • कोड कोड की ग्रेटर पीयर समीक्षा (क्योंकि वे अधिक आसानी से संगत हैं, इसलिए वे अधिक विविध परिस्थितियों में उपयोग किए जाते हैं, इसलिए यह बग को कम करने में मदद करता है, लेकिन मॉड्यूल को अधिक सामान्यीकृत करने में भी मदद करता है)।
  • कार्यों की बढ़िया विविधता हल हो गई। चूंकि पुस्तकालय कम हैं, इसलिए कोई भी एक लिख सकता है। इसका मतलब है कि फ़िल्टर करने के लिए बहुत अधिक बकवास है (व्यापक रूप से उपयोग की जाने वाली पुस्तकालयों के बारे में लेख इस के साथ मदद करते हैं), लेकिन इसका अर्थ यह भी है कि एक पुस्तकालय जो कुछ बहुत ही विशिष्ट समस्या हल करता है (जैसे localizing strings and dates) शायद यह भी मौजूद है।

और फिर एक नोड मॉड्यूल browserify कहा जाता है अविश्वसनीय रूप से सरल अपने क्लाइंट-साइड कोड के लिए वास्तविक निर्माण प्रक्रिया बनाता है, और आप केवल आपके NPM पर पा कोड के किसी भी भाग के बारे में उपयोग कर सकते हैं।

यह jQuery की तरह पुस्तकालयों की "रसोई सिंक" मानसिकता से दूर हो जाता है (जिन्होंने अपना स्वयं का कस्टम बिल्ड सिस्टम विकसित किया है ताकि वे अपने कोड को मॉड्यूलर करना शुरू कर सकें) जो मानते हैं कि उन्हें अपने उपयोगकर्ता की हर समस्या को हल करने की आवश्यकता है, केवल उन परिणामों का उत्पादन करने के बजाय जो अन्य पुस्तकालयों द्वारा उपयोग किया जा सकता है।

+0

धन्यवाद! प्रश्न पोस्ट करने के बाद से मैंने संकलन के लिए एएमडी और नोड जेएस का उपयोग कर एक जेएस प्रोजेक्ट बनाया है। –

+0

npmjs.org * (मेटा) सीपीएन की तुलना में * भयानक * है (http://metacpan.org)। इसमें कोई रेटिंग सिस्टम नहीं है, और मॉड्यूल चुनने का मतलब है कि एक ही चीज़ को कम या ज्यादा कम करने वाले क्रैपी विकल्पों के माध्यम से गुजरना पड़ता है। उदाहरण के लिए, एक [सीएसवी I/O मॉड्यूल] (https://npmjs.org/search?q=csv) खोजने का प्रयास करें। और [पिंटो] (https://metacpan.org/module/Pinto:: मैनुअल :: इंट्रोडक्शन) आपको वही चरण आगे ले जाता है जिससे आप वास्तव में नियंत्रित मॉड्यूल संस्करणों को नियंत्रित कर सकते हैं। –

+0

@DanDascalescu मैं असहमत हूं; एनपीएम विश्वसनीयता में सीपीए से काफी बेहतर है। मैं mingw, cmd, unix-like shells पर npm चला सकता हूं और बहुत ही कम निर्भरता की समस्याएं होती हैं, और डिफ़ॉल्ट रूप से चीजें स्थानीय रूप से स्थापित होती हैं और संकुल से कोड लेना बहुत आसान होता है क्योंकि निर्भरता आमतौर पर वैश्विक की बजाय स्पष्ट रूप से पारित होती है। पर्ल कुछ भी कर सकता है जावास्क्रिप्ट कर सकते हैं और सीपीएएन सैद्धांतिक रूप से एनपीएम के रूप में अच्छा हो सकता है, लेकिन जैसा कि यह खड़ा है, एनपीएम अधिक उपयोगकर्ता के अनुकूल है और अक्सर कम तोड़ता है; इस मामले के लिए कोई कारण नहीं है लेकिन यह अभी ठीक है। – Dmitry

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

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