मुझे कब उपयोग करना चाहिए () और कब परिभाषित का उपयोग करना चाहिए ()?


316

मैं पिछले कुछ दिनों से जरूरी चीजों के साथ खेल रहा हूं। मैं परिभाषित और आवश्यकता के बीच के अंतर को समझने की कोशिश कर रहा हूं।

परिभाषित करने के लिए मॉड्यूल जुदाई के लिए अनुमति देता है और निर्भरता के लिए अनुमति का पालन करने के लिए अनुमति देता है। लेकिन यह उन सभी फाइलों को डाउनलोड करता है जिनकी इसके साथ शुरुआत करने की जरूरत है। जबकि आवश्यकता पड़ने पर आपको केवल वही लोड करना पड़ता है जो आपको चाहिए।

क्या इन दोनों का एक साथ उपयोग किया जा सकता है और उनमें से प्रत्येक का उपयोग किन उद्देश्यों के लिए किया जाना चाहिए?

जवाबों:


331

साथ defineआप require.js में एक मॉड्यूल है कि आप तो अन्य मॉड्यूल परिभाषाओं में पर निर्भर करते हैं या बयान की आवश्यकता होती है सकते हैं रजिस्टर। आपके साथ require"बस" लोड / एक मॉड्यूल या जावास्क्रिप्ट फ़ाइल का उपयोग करें जिसे आवश्यकता से लोड किया जा सकता है। जेएस उदाहरण के लिए प्रलेखन पर एक नज़र है

अंगूठे का मेरा नियम:

  • परिभाषित करें: यदि आप एक मॉड्यूल घोषित करना चाहते हैं तो आपके आवेदन के अन्य भागों पर निर्भर करेगा।

  • आवश्यकता: यदि आप सामान को लोड और उपयोग करना चाहते हैं।


331

आवश्यकता से। स्रोत कोड (1902 पंक्ति):

/**
 * The function that handles definitions of modules. Differs from
 * require() in that a string for the module should be the first argument,
 * and the function to execute after dependencies are loaded should
 * return a value to define the module corresponding to the first argument's
 * name.
 */

define()समारोह दो वैकल्पिक पैरामीटर (एक स्ट्रिंग है कि एक मॉड्यूल आईडी और आवश्यक मॉड्यूल की एक सरणी का प्रतिनिधित्व करते हैं) और एक आवश्यक पैरामीटर (एक कारखाना विधि) स्वीकार करता है।

फ़ैक्टरी विधि की वापसी आपके मॉड्यूल के लिए कार्यान्वयन को वापस करना चाहिए (उसी तरह से जो मॉड्यूल पैटर्न करता है)।

require()समारोह एक नया मॉड्यूल के कार्यान्वयन वापस जाने के लिए नहीं है।

define()आप का उपयोग कुछ ऐसा पूछ रहा है जैसे "फ़ंक्शन को चलाएं जो मैं एक पैरामीटर के रूप में गुजर रहा हूं और जो भी आईडी मैं पास कर रहा हूं उसे वापस लौटाएं, लेकिन इससे पहले, जांचें कि ये निर्भरताएं भरी हुई हैं"

require()आप का उपयोग कुछ ऐसा कह रहा है जैसे "जो फ़ंक्शन मैं पास करता हूं उसमें निम्नलिखित निर्भरताएं हैं, यह जांचें कि ये निर्भरताएं इसे चलाने से पहले लोड की जाती हैं"

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


2
क्या इस बात में कोई अंतर है कि क्या एक परिभाषित मॉड्यूल के भीतर, या इसके बाहर उपयोग करने की आवश्यकता है? यदि इसका उपयोग किसी मॉड्यूल के अंदर किया जाता है, तो उपयोग की आवश्यकता के बजाय केवल मॉड्यूल परिभाषा में आवश्यकताओं को क्यों सेट करें?
पेट्री

यह उत्तर इतना अलग क्यों है जो मैंने यहाँ पढ़ा है आवश्यकता है ।jj.org/docs/api.html#deffunc ??
जेम्स लिन

2
@Petri, ऐसा लगता है कि आप आवश्यकताएँ मॉड्यूल के अतुल्यकालिक रूप से आवश्यकता के संस्करण 2 व्यवहार देख रहे हैं। "आवश्यकताएँ 2.0 मॉड्यूल के कारखाने के कार्य (पारित समारोह define()) को निष्पादित नहीं करेगा , जब तक require([])कि एक कॉल न हो जो इसके लिए कहा गया है, या ऐसा कुछ जो इस पर निर्भर करता है।" github.com/jrburke/requirejs/wiki/…
alxndr

2

मॉड्यूल परिभाषा को सुविधाजनक बनाने के लिए "परिभाषित" विधि और निर्भरता लोडिंग से निपटने के लिए "आवश्यकता" विधि

निम्नलिखित हस्ताक्षर का उपयोग कर प्रस्ताव के आधार पर नामित या अनाम मॉड्यूल को परिभाषित करने के लिए परिभाषित किया जाता है:

define(
module_id /*optional*/, 
[dependencies] /*optional*/, 
definition function /*function for instantiating the module or object*/
);

दूसरी ओर आवश्यकता को आमतौर पर एक उच्च-स्तरीय जावास्क्रिप्ट फ़ाइल में कोड लोड करने के लिए उपयोग किया जाता है या एक मॉड्यूल के भीतर आपको गतिशील रूप से निर्भरता प्राप्त करने की इच्छा रखनी चाहिए

अधिक जानकारी के लिए https://addyosmani.com/writing-modular-js/ का संदर्भ लें ।


2

सामान्य नियम:

  1. आप परिभाषित का उपयोग तब करते हैं जब आप एक मॉड्यूल को परिभाषित करना चाहते हैं जो पुन: उपयोग किया जाएगा

  2. आपको बस एक निर्भरता को लोड करने की आवश्यकता होती है

    //sample1.js file : module definition 
    define(function() {
          var sample1 = {};
          //do your stuff
         return sample1;
     });
    
    //sample2.js file : module definition and also has a dependency on jQuery and sample1.js
    define(['jquery', 'sample1'], function($,sample1) {
        var sample2 = {
            getSample1:sample1.getSomeData();
        };
        var selectSomeElement = $('#someElementId');
        //do your stuff....
        return sample2;
    });
    
    //calling in any file (mainly in entry file)
    require(['sample2'], function(sample2) {
        // sample1 will be loaded also
    });
    

आशा है कि यह आपकी मदद करता है।


1

आवश्यकता () और डिफाइन (दोनों) निर्भरता को लोड करने के लिए उपयोग किया जाता है। इन दोनों विधि के बीच एक बड़ा अंतर है।

इसकी बहुत ही सरल दोस्तों

आवश्यकता (): तत्काल कार्य चलाने के लिए विधि का उपयोग किया जाता है। परिभाषित (): विधि का उपयोग कई स्थानों (पुन: उपयोग) में उपयोग के लिए मॉड्यूल को परिभाषित करने के लिए किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.