क्या इन-ब्राउज़र जावास्क्रिप्ट के लिए कोई लाइब्रेरी है जो नोड्स के रूप में समान लचीलापन / मॉड्यूलरिटी / उपयोग में आसानी प्रदान करती है require
?
अधिक विवरण प्रदान करने के लिए: कारण require
इतना अच्छा है कि यह है:
- कोड को अन्य स्थानों से गतिशील रूप से लोड करने की अनुमति देता है (जो स्टाइलिस्टिक रूप से बेहतर है, मेरी राय में, HTML में आपके सभी कोड लिंक करने की तुलना में)
- यह बिल्डिंग मॉड्यूल के लिए एक सुसंगत इंटरफ़ेस प्रदान करता है
- मॉड्यूल के लिए अन्य मॉड्यूल पर निर्भर करना आसान है (इसलिए मैं लिख सकता हूं, उदाहरण के लिए, एक एपीआई जिसे jQuery की आवश्यकता होती है ताकि मैं उपयोग कर सकूं
jQuery.ajax()
- भरी हुई जावास्क्रिप्ट को हटा दिया जाता है , जिसका अर्थ है कि मैं लोड कर सकता हूं
var dsp = require("dsp.js");
और मैं एक्सेस कर पाऊंगाdsp.FFT
, जो मेरे स्थानीय लोगों के साथ हस्तक्षेप नहीं करेगाvar FFT
मुझे अभी तक एक पुस्तकालय नहीं मिला है जो प्रभावी रूप से ऐसा करता हो। मेरे द्वारा उपयोग किए जाने वाले वर्कआर्ड हैं:
कॉफ़ीस्क्रिप्ट-कॉनकट - यह अन्य जेएस की आवश्यकता के लिए काफी आसान है, लेकिन आपको इसे संकलित करना होगा, जिसका अर्थ है कि यह तेजी से विकास के लिए कम महान है (उदाहरण के लिए एपीआई का परीक्षण करना)
आवश्यकताएं - यह लोकप्रिय, सीधा और 1-3 है, लेकिन स्कूपिंग की कमी एक वास्तविक सौदा-ब्रेकर है (मेरा मानना है कि हेड। जेएस समान है कि इसमें स्कूपिंग की कमी है, हालांकि मेरे पास इसका उपयोग करने का कभी कोई अवसर नहीं है। इसी तरह, एलएबीज लोड कर सकते हैं और
.wait()
निर्भरता मुद्दों को शांत कर सकते हैं, लेकिन यह अभी भी स्कूपिंग नहीं करता है)
जहाँ तक मैं बता सकता हूँ, वहाँ जावास्क्रिप्ट के गतिशील और / या async लोड करने के लिए कई समाधान प्रतीत होते हैं, लेकिन वे HTML से js लोड करने के समान ही स्कूपिंग समस्याएँ हैं। किसी भी चीज़ से अधिक, मैं जावास्क्रिप्ट लोड करने का एक तरीका चाहूंगा जो वैश्विक नाम स्थान को बिल्कुल प्रदूषित नहीं करता है, लेकिन फिर भी मुझे पुस्तकालयों को लोड करने और उपयोग करने की अनुमति देता है (जैसा कि नोड की आवश्यकता है)।
2020 अद्यतन: ES6 में मॉड्यूल अब मानक हैं, और 2020 के मध्य तक अधिकांश ब्राउज़रों द्वारा मूल रूप से समर्थित हैं । मॉड्यूल सिंक्रोनस और एसिंक्रोनस (प्रोमिस का उपयोग करके) लोडिंग दोनों का समर्थन करता है। मेरी वर्तमान सिफारिश यह है कि अधिकांश नई परियोजनाओं को ES6 मॉड्यूल का उपयोग करना चाहिए, और लीगेसी ब्राउज़र के लिए एक जेएस फ़ाइल पर वापस गिरने के लिए एक ट्रांसपिलर का उपयोग करना चाहिए।
एक सामान्य सिद्धांत के रूप में, बैंडविड्थ आज भी आमतौर पर जब मैं मूल रूप से यह सवाल पूछा था की तुलना में बहुत व्यापक है। इसलिए व्यवहार में, आपने संभवतः ES6 मॉड्यूल के साथ एक ट्रांसपिलर का उपयोग करने के लिए चुना है, और नेटवर्क के बजाय कोड दक्षता पर अपने प्रयास को केंद्रित करें।
पिछला संपादन (या यदि आप ES6 मॉड्यूल पसंद नहीं): इस लेखन के बाद से, मैं बड़े पैमाने पर इस्तेमाल किया है RequireJS (जिसका अब बहुत स्पष्ट प्रलेखन है) का उपयोग किया है। मेरे विचार से रिक्जेस्ट वास्तव में सही विकल्प था। मैं स्पष्ट करना चाहता हूं कि सिस्टम उन लोगों के लिए कैसे काम करता है जो मेरे जैसे ही भ्रमित हैं:
आप require
रोजमर्रा के विकास में उपयोग कर सकते हैं । मॉड्यूल एक फ़ंक्शन (आमतौर पर ऑब्जेक्ट या फ़ंक्शन) द्वारा लौटाया जा सकता है और पैरामीटर के रूप में स्कोप किया जाता है। आप तैनाती के लिए अपनी परियोजना को एकल फ़ाइल में भी संकलित कर सकते हैं r.js
(व्यवहार में यह लगभग हमेशा तेज होता है, भले ही require
समानांतर में स्क्रिप्ट लोड कर सकता है)।
आवश्यकता के अनुसार प्राथमिक अंतर और नोड-शैली की आवश्यकता होती है जैसे ब्राउज़राइज़ (एक अच्छा प्रोजेक्ट जो tjameson द्वारा सुझाया गया है) का उपयोग करता है, जिस तरह से मॉड्यूल डिजाइन और आवश्यक हैं:
- आवश्यकताएँJ AMD (Async मॉड्यूल परिभाषा) का उपयोग करता है। एएमडी में,
require
लोड और एक कॉलबैक फ़ंक्शन के लिए मॉड्यूल (जावास्क्रिप्ट फ़ाइलों) की एक सूची लेता है। जब यह प्रत्येक मॉड्यूल को लोड करता है, तो यह कॉलबैक के पैरामीटर के रूप में प्रत्येक मॉड्यूल के साथ कॉलबैक कहता है। इस प्रकार यह वास्तव में अतुल्यकालिक है और इसलिए वेब के लिए अच्छी तरह से अनुकूल है। - नोड कॉमन का उपयोग करता है। कॉमनजस में,
require
एक अवरोधक कॉल है जो एक मॉड्यूल को लोड करता है और इसे एक वस्तु के रूप में लौटाता है। यह नोड के लिए ठीक काम करता है क्योंकि फाइलें फाइल सिस्टम से पढ़ी जाती हैं, जो काफी तेजी से होती है, लेकिन वेब पर खराब काम करती है क्योंकि फाइल को सिंक्रोनाइज़ करने में ज्यादा समय लग सकता है।
व्यवहार में, कई डेवलपर्स ने कभी भी एएमडी को देखने से पहले नोड (और इसलिए कॉमनजेएस) का उपयोग किया है। इसके अलावा, कई पुस्तकालयों / मॉड्यूल कॉमनजस के लिए लिखे जाते हैं (किसी exports
वस्तु में चीजों को जोड़कर ) एएमडी के बजाय ( define
फ़ंक्शन से मॉड्यूल को वापस करके )। इसलिए, बहुत से नोड-आधारित-वेब डेवलपर कॉमनजेएस लाइब्रेरी का उपयोग वेब पर करना चाहते हैं। यह संभव है, चूंकि लोडिंग ए से<script>
टैग करना अवरुद्ध है। Browserify जैसे समाधान CommonJS (Node) मॉड्यूल लेते हैं और उन्हें लपेटते हैं ताकि आप उन्हें स्क्रिप्ट टैग के साथ शामिल कर सकें।
इसलिए, यदि आप वेब के लिए अपना स्वयं का मल्टी-फाइल प्रोजेक्ट विकसित कर रहे हैं, तो मैं अत्यधिक रूप से आवश्यकताएँ की सिफारिश करता हूं, क्योंकि यह वास्तव में वेब के लिए एक मॉड्यूल सिस्टम है (हालांकि निष्पक्ष प्रकटीकरण में, मैं एएमडी को कॉमनजेएस की तुलना में बहुत अधिक प्राकृतिक पाता हूं)। हाल ही में, अंतर कम महत्वपूर्ण हो गया है, क्योंकि आवश्यकताएँ अब आपको अनिवार्य रूप से कॉमनजेएस सिंटैक्स का उपयोग करने की अनुमति देती है। इसके अतिरिक्त, एनईआरजेएस का उपयोग नोड में एएमडी मॉड्यूल को लोड करने के लिए किया जा सकता है (हालांकि मैं नोड-एम-लोडर को पसंद करता हूं )।