एएमडी के साथ साझा पुस्तकालय एक अच्छा विचार है?

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

प्रो: इसका उपयोग करना आसान है

  • इस लाइब्रेरी का उपयोग करके एक ऐप डेवलपर के रूप में आप इसे प्राप्त कर सकते हैं और उस पर निर्भरता जोड़ सकते हैं, यह जानने के बिना कि आपको jquery, underscore, आदि की आवश्यकता है
  • उन चीज़ों के पथ के साथ requjs को कॉन्फ़िगर करने के लिए कोई नहीं
  • उस मामले के बारे में कोई चिंता नहीं है जहां एक पुस्तकालय को jQuery 1.x की आवश्यकता होती है जबकि दूसरी लाइब्रेरी को 2.x
  • की आवश्यकता होती है

Con: यह फूला हुआ है

  • यदि मुख्य एप्लिकेशन या किसी अन्य लाइब्रेरी को jQuery का उपयोग करने की भी आवश्यकता है, जो संभवतः लगता है, तो यह अनिवार्य रूप से दो बार डाउनलोड किया जाएगा (या n बार)

मैं यहाँ कुछ भी याद कर रहा हूँ? तो ऐसा करने का सही तरीका कौन सा है, या उत्तर "यह निर्भर करता है", या "दोनों के संस्करण बनाते हैं"? ऐसा लगता है कि आप सामान्य रूप से कोड साझा करना चाहते हैं, लेकिन यह उन पुस्तकालयों के उपभोक्ता पर रखता है जिनमें गैर-निर्भर निर्भरताएं होती हैं, और एक उपकरण की आवश्यकता होती है जो किसी दिए गए लाइब्रेरी का संस्करण ढूंढने के लिए बाधाओं को हल करती है सभी आश्रित घटकों के साथ संगत। क्या वहां कुछ ऐसा है जो ऐसा कुछ करता है?

0
"क्या इसे jQuery और अंडरस्कोर में भी खींचना चाहिए [...]" - मैं कहूंगा no , यही कारण है कि एएमडी पहले स्थान पर मौजूद है, इसलिए मैं कहूंगा यह सही तरीका है।
जोड़ा लेखक elclanrs, स्रोत

2 उत्तर

मैं आपकी खुद की लाइब्रेरी के साथ किसी तृतीय पक्ष लाइब्रेरी (जैसे jQuery या अंडरस्कोर) को शामिल करने के किसी भी अच्छे कारण के बारे में नहीं सोच सकता। इस तकनीक को कहीं भी नियोजित करना दुर्लभ है, अगर बिलकुल भी, क्योंकि यह आपके कोड के उपभोक्ता को बहुत अधिक प्रतिबंधित करता है।

जैसा कि आप कहते हैं, न केवल यह ब्लोट जोड़ देगा, लेकिन अगर मैं ज़िप्टो या लो डैश या jQuery के एक अलग संस्करण का उपयोग करना चाहता हूं तो क्या होगा? यदि आपकी लाइब्रेरी बस एक निर्भरता के रूप में jQuery और अंडरस्कोर को सूचीबद्ध करती है तो मैं वैकल्पिक संस्करणों या पुस्तकालयों को लोड करने के लिए आसानी से मानचित्र कर सकता हूं।

एएमडी (और RequJS) के उपयोगकर्ता आमतौर पर पथ, मानचित्र और शिम को कॉन्फ़िगर करने के साथ बहुत सहज होते हैं क्योंकि यह लगभग सभी मामलों में आवश्यक है, इसलिए मैं इसके बारे में चिंता नहीं करता।

जब उत्पादन के लिए जेएस को अनुकूलित करने की बात आती है तो सबकुछ अलग रखने से लचीलापन भी मिल जाएगा। उदाहरण के लिए, मुझे अक्सर jQuery को मुख्य मॉड्यूल में बनाना पसंद है जो सभी पृष्ठों पर लोड होता है और इसे बाहर करने के लिए अन्य मॉड्यूल सेट करता है।

An example of what I mean with that can be seen here: https://github.com/simonsmith/modular-html-requirejs

1
जोड़ा

मैं कहूंगा कि आपको एक अपरिवर्तित संस्करण और एक अनुकूलित एक प्रदान करना चाहिए। अगर किसी कारण से आप दोनों नहीं कर सकते हैं तो केवल अपरिवर्तित संस्करण प्रदान करें। अप्रत्याशित संस्करण क्यों?

  • आपका कोड शायद बग-मुक्त नहीं है। किसी बग को ट्रैक करने के लिए अपनी लाइब्रेरी का उपयोग करना किसी के लिए आसान है और मूल स्रोत के बीच 1-के-1 मैपिंग और उनके डीबगिंग वातावरण में जो देखा गया है, उसके लिए शायद पैच का योगदान हो सकता है। (मैंने स्रोत मानचित्रों का प्रयास किया है। वे थे उपयोगी लेकिन फंकी परिणाम उत्पन्न किए।)

  • आपने इसे स्वयं कहा है: jQuery जैसे पुस्तकालय अंतिम एप्लिकेशन में एन बार लोड हो सकते हैं। यदि आप डेवलपर्स को केवल अपनी लाइब्रेरी का उपयोग करने का तरीका प्रदान करते हैं, तो वे यह निर्धारित करने के लिए परीक्षण चला सकते हैं कि वे jQuery के विभिन्न संस्करणों को केवल एक के साथ बदल सकते हैं या नहीं। (अधिकांश मामलों में जहां पुस्तकालय jQuery का एक विशिष्ट संस्करण का उल्लेख करता है या जहाज करता है, ऐसा इसलिए होता है क्योंकि यह ऐसा संस्करण होता है जो पुस्तकालय बनाया गया था, और हार्ड निर्भरता के कारण नहीं।)

अनुकूलित संस्करण प्रदान करें ताकि कोई भी जो हमारी लाइब्रेरी को आजमा देना चाहता है, इसे तेज़ कर सकता है।

तुम पूछो:

ऐसा लगता है कि आप सामान्य रूप से कोड साझा करना चाहते हैं, लेकिन यह उन पुस्तकालयों के उपभोक्ता पर रखता है जिनमें गैर-निर्भर निर्भरताएं होती हैं, और एक उपकरण की आवश्यकता होती है जो बाधाओं को किसी दिए गए संस्करण को ढूंढने के लिए हल करती है लाइब्रेरी जो सभी निर्भर घटकों के साथ संगत है। क्या वहां कुछ ऐसा है जो ऐसा कुछ करता है?

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

0
जोड़ा