दिलचस्प पोस्ट
$। एजेक्स (सीरियलइज़ (+ + अतिरिक्त डेटा) के माध्यम से डेटा कैसे जोड़ें इस तरह से PHP 5 सख्त मानकों त्रुटि अक्षम Jquery मोबाइल के लिए गतिशील रूप से एचटीएमएल जोड़ने के बाद एक अनुभाग को रीफ्रेश करें सभी jquery घटनाओं $ (दस्तावेज़) के लिए बाध्य होना चाहिए? क्यों मैक ओएस पर नोकोगीरी को लिबिकॉन के साथ असफल हो रहा है? ActionBar में अतिप्रवाह मेनू में आइकन दिखाने के लिए तैनाती त्रुटि: बिल्ला शुरू करने में विफल रहा है, सर्वर पोर्ट 8080 पहले से उपयोग में है मैं एक स्ट्रिंग में एक पायथन डिक्शनरी को कैसे सीरियल कर सकता हूँ, और फिर वापस एक शब्दकोश में? पायथन में, मैं एक छवि के लिए EXIF ​​डेटा कैसे पढ़ूं? जावा में कर्ल का उपयोग कैसे करें? जाओ, एक्स वाई को लागू नहीं करता (… विधि में एक सूचक रिसीवर है) मेरा एंड्रॉइड कैमरा उरी एक रिक्त मान लौट रहा है, लेकिन सैमसंग तय जगह में है, मदद? कैसे IEnumerable को ObservableCollection में परिवर्तित किया जा सकता है? Matlotlib का उपयोग करते हुए एक्स-अक्ष पर विशिष्ट तिथियों के विरुद्ध डेटा को कैसे छान डालें onInterceptTouchEvent केवल ACTION_DOWN हो जाता है

कॉमनजेएस, एएमडी और आवश्यकताओंजेएस के बीच संबंध?

मैं अभी भी आम जे एस, एएमडी और आवश्यकताओं जेएस के बारे में बहुत उलझन में हूँ यहां तक ​​कि एक बहुत पढ़ने के बाद

मुझे पता है कि सामान्य जेएस (पूर्ववर्ती सर्वरजेएस) कुछ जावास्क्रिप्ट विनिर्देशों (यानी मॉड्यूल) को परिभाषित करने के लिए एक समूह है जब भाषा ब्राउज़र के बाहर प्रयोग की जाती है। CommonJS मॉड्यूल विनिर्देश में कुछ कार्यान्वयन है जैसे नोड.जेएस या रिंगोज, सही है?

कॉमनजेएस, एसिंक्रोनस मॉड्यूल डेफिनेशन (एएमडी) और आवश्यकताओंजेएस के बीच संबंध क्या है? क्या आवश्यकजेएस सामान्यजेएस मॉड्यूल परिभाषा का कार्यान्वयन है? यदि हां, तो एएमडी क्या है?

Solutions Collecting From Web of "कॉमनजेएस, एएमडी और आवश्यकताओंजेएस के बीच संबंध?"

RequireJS AMD API (स्रोत) लागू करता है।

कॉमनJएस एक exports वस्तु की मदद से मॉड्यूल को परिभाषित करने का एक तरीका है, जो कि मॉड्यूल सामग्री को परिभाषित करता है। सीधे शब्दों में कहें, एक आम जे एस के कार्यान्वयन इस तरह काम कर सकता है:

 // someModule.js exports.doSomething = function() { return "foo"; }; //otherModule.js var someModule = require('someModule'); // in the vein of node exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; }; 

असल में, कॉमनJS निर्दिष्ट करता है कि आपको निर्भरता लाने के लिए require() फ़ंक्शन, मॉड्यूल सामग्री निर्यात करने के लिए एक exports चर और एक मॉड्यूल पहचानकर्ता (जो इस मॉड्यूल के संबंध में प्रश्न में मॉड्यूल के स्थान का वर्णन करता है) की आवश्यकता होती है, जिसे आवश्यकता होती है निर्भरता ( स्रोत ) CommonJS के विभिन्न कार्यान्वयन हैं, जिसमें नोडजेएस शामिल हैं , जो आपने उल्लेख किया है।

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

दूसरी ओर, RequireJS एएमडी लागू करता है, जिसे ब्राउज़र पर्यावरण ( स्रोत ) के अनुरूप बनाया गया है। जाहिर है, AMD CommonJS ट्रांसपोर्ट प्रारूप के स्पिनॉफ़ के रूप में शुरू हुआ और अपने स्वयं के मॉड्यूल परिभाषा API में विकसित हुआ। इसलिए दोनों के बीच समानताएं एएमडी में नई सुविधा define() फ़ंक्शन है जो मॉड्यूल को लोड होने से पहले इसकी निर्भरता घोषित करने की अनुमति देता है। उदाहरण के लिए, परिभाषा हो सकती है:

 define('module/id/string', ['module', 'dependency', 'array'], function(module, factory function) { return ModuleContents; }); 

इसलिए, कॉमनजेएस और एएमडी जावास्क्रिप्ट मॉड्यूल परिभाषा एपीआई हैं जो अलग-अलग कार्यान्वयन करते हैं, लेकिन दोनों एक ही मूल से आते हैं।

  • एएमडी ब्राउज़र के लिए अधिक अनुकूल है, क्योंकि यह मॉड्यूल निर्भरता के एसिंक्रोनस लोडिंग का समर्थन करता है।
  • RequireJS AMD का कार्यान्वयन है, जबकि एक ही समय में आमज (सामान्य रूप से मॉड्यूल पहचानकर्ताओं में) की भावना रखने की कोशिश कर रहा है।

आप और भी भ्रमित करने के लिए, एक AMD कार्यान्वयन के दौरान, RequireJS, एक CommonJS आवरण प्रदान करता है ताकि CommonJS मॉड्यूल लगभग DirectJS RequireJS के साथ उपयोग के लिए आयात किया जा सके।

 define(function(require, exports, module) { var someModule = require('someModule'); // in the vein of node exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; }; }); 

मुझे आशा है कि इससे चीजों को स्पष्ट करने में मदद मिलती है!

सामान्यज्या इससे अधिक है – यह जावास्क्रिप्ट के लिए एक आम एपीआई और पारिस्थितिकी तंत्र को परिभाषित करने के लिए एक प्रोजेक्ट है। कॉमनजेएस का एक हिस्सा मॉड्यूल विनिर्देश है नोड। जेएस और रिंगोज सर्वर-साइड जावास्क्रिप्ट रनटाइम हैं, और हां, दोनों ही आम जेएस मॉड्यूल स्पेस के आधार पर मॉड्यूल कार्यान्वित करते हैं।

AMD (एसिंक्रोनस मॉड्यूल परिभाषा) मॉड्यूल के लिए एक और विनिर्देश है। RequireJS शायद AMD का सबसे लोकप्रिय कार्यान्वयन है कॉमनजेएस से एक बड़ा अंतर यह है कि एएमडी निर्दिष्ट करता है कि मॉड्यूल को असिंक्रोनस रूप से लोड किया जाता है – इसका मतलब है कि मॉड्यूल को समानांतर में लोड किया जाता है, जो कि निष्पादन को रोकने के लिए समाप्त होने के लिए इंतजार कर रहा है।

आम तौर पर एएमडी क्लाइंट-साइड (इन-ब्राउज़र) जावास्क्रिप्ट डेवलपमेंट में इसका इस्तेमाल होता है, और आम जे एस मॉड्यूल को आमतौर पर सर्वर-साइड का इस्तेमाल किया जाता है। हालांकि, आप या तो वातावरण में मॉड्यूल स्पेक का उपयोग कर सकते हैं – उदाहरण के लिए, RequireJS Node.js और ब्राउज़र में चलने के लिए दिशा निर्देश प्रदान करता है एक सामान्य जेएस मॉड्यूल कार्यान्वयन है जो ब्राउज़र में चला सकता है।

संक्षिप्त उत्तर होगा:

कॉमनजेएस और एएमडी विनिर्देशों (या स्वरूप) हैं कि कैसे जावास्क्रिप्ट अनुप्रयोगों में मॉड्यूल और उनकी निर्भरता को घोषित किया जाना चाहिए।

RequireJS एक स्क्रिप्ट लोडर लाइब्रेरी है जो AMD के अनुरूप है, curljs एक और उदाहरण है

CommonJS आज्ञाकारी:

अदी ओस्मानी की किताब से ली गई

 // package/lib is a dependency we require var lib = require( "package/lib" ); // behavior for our module function foo(){ lib.log( "hello world!" ); } // export (expose) foo to other modules as foobar exports.foobar = foo; 

AMD आज्ञाकारी:

 // package/lib is a dependency we require define(["package/lib"], function (lib) { // behavior for our module function foo() { lib.log( "hello world!" ); } // export (expose) foo to other modules as foobar return { foobar: foo } }); 

कहीं और मॉड्यूल के साथ प्रयोग किया जा सकता है:

 require(["package/myModule"], function(myModule) { myModule.foobar(); }); 

कुछ पृष्ठभूमि:

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

सूत्रों का कहना है:

  • RequireJS – क्यों AMD?
  • एडी ओस्मानी – सीखना जावास्क्रिप्ट डिजाइन पैटर्न – आधुनिक मॉड्यूलर जावास्क्रिप्ट डिजाइन पैटर्न

का हवाला देते हुए

AMD :

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

CommonJS :

  • एक सर्वर-पहला दृष्टिकोण
  • समकालिक व्यवहार मानते हुए
  • I / O, फाइल सिस्टम, वादे और अधिक जैसे चिंताओं का एक व्यापक सेट को कवर करें
  • अनवरोधित मॉड्यूल का समर्थन करता है, यह ES.next/Harmony विनिर्देशों के लिए थोड़े और अधिक करीब महसूस कर सकता है, जो आपको AMD लागू करने के लिए परिभाषित () आवरण से मुक्त करता है।
  • मॉड्यूल के रूप में केवल वस्तुओं का समर्थन करें

यह जावास्क्रिप्ट प्रोग्राम मॉड्यूलर को कई फाइलों में व्यवस्थित करने और main js module से child-modules को कॉल करने के लिए काफी सामान्य है।

बात यह है जावास्क्रिप्ट इस प्रदान नहीं करता है। आज भी क्रोम और एफएफ के नवीनतम ब्राउज़र संस्करणों में नहीं।

लेकिन, जावास्क्रिप्ट में कोई अन्य जावास्क्रिप्ट मॉड्यूल कॉल करने के लिए क्या कोई शब्द है?

यह प्रश्न कई लोगों के लिए दुनिया का कुल पतन हो सकता है क्योंकि उत्तर नहीं है


ईएस 5 (2009 में जारी) में जावास्क्रिप्ट में कोई कीवर्ड जैसे आयात , शामिल , या आवश्यकता नहीं थी

ईएस 6 दिन के लिए (2015 में रिलीज) आयात कुंजीशब्द ( https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/import ) का प्रस्ताव रखता है, लेकिन कोई भी ब्राउज़र इसका क्रियान्वयन नहीं करता है।

यदि आप Babel 6.18.0 का उपयोग करते हैं और केवल ES2015 विकल्प के साथ पिपिलियम का उपयोग करते हैं

 import myDefault from "my-module"; 

आपको फिर से require होगी

 "use strict"; var _myModule = require("my-module"); var _myModule2 = _interopRequireDefault(_myModule); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 

ऐसा इसलिए है क्योंकि इसका मतलब है कि मॉड्यूल को नोड। जेएस से लोड किया जाएगा। Node.js मॉड्यूल में कार्य को लपेटने के लिए सिस्टम स्तरीय फ़ाइल से सब कुछ संभाल लेगा।

क्योंकि जावास्क्रिप्ट फ़ंक्शंस में मॉड्यूल का प्रतिनिधित्व करने वाले एकमात्र रैपर हैं।

मैं CommonJS और AMD के बारे में बहुत भ्रमित हूँ?

दोनों कॉमनजेएस और एएमडी मॉड्यूल स्मार्ट लोड करने के लिए जावास्क्रिप्ट "दोष" से कैसे उबरने के लिए दो अलग-अलग तकनीक हैं