क्यों Magento 2 `पथ` के बजाय आवश्यकताएँ` नक्शा` का उपयोग करता है


18

मैगेंटो 2 के रिक्जेस्ट कार्यान्वयन में, कई मुख्य मॉड्यूल इस तरह के कॉन्फ़िगरेशन का उपयोग करते हैं

map: {
    '*': {
        editTrigger:   'mage/edit-trigger',
        addClass:      'Magento_Translation/add-class'
    }
}

आवश्यकताएँJJS में, mapविन्यास निर्देश डेवलपर्स को RequJS बताने की अनुमति देता है

जब आप मॉड्यूल X को लोड करते हैं, और यह मॉड्यूल Y का उपयोग करता है, तो मॉड्यूल Y को मॉड्यूल Z से बदलें - लेकिन केवल मॉड्यूल X के लिए

या, कोड में

map: {
    'modulex':{
        'moduley':'modulez'
    }
}

यह mapसुविधा मूल रूप से आपको कॉन्फ़िगरेशन के माध्यम से मॉड्यूल परिभाषा को स्वैप करने की अनुमति देती है - मैगेंटो में बोलते हैं, यह जावास्क्रिप्ट के लिए एक मॉड्यूल फिर से लिखना सुविधा है।

हालांकि मेरे लिए यह स्पष्ट नहीं है *कि mapसंपत्ति के लिए मैगेंटो का भारी उपयोग किस तरह से किया जाता है ।

map: {
    '*': {
        editTrigger:   'mage/edit-trigger',
        addClass:      'Magento_Translation/add-class'
    }
}

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

हालांकि, Magento के लिए एक स्थानापन्न के रूप में उपयोग करने के लिए प्रकट होता है RequireJS की pathsसंपत्ति । ऐसा लगता है कि Magento निम्नलिखित के साथ एक ही चीज हासिल कर सकता था

paths: {
    'editTrigger': 'mage/edit-trigger',
    'addClass':    'Magento_Translation/add-class',
}

और फिर जरूरत पड़ने पर चुनिंदा मैपिंग करता है।

क्या किसी को पता है कि मैगेंटो ने map:*अलियासिंग के लिए अपना तरीका क्यों चुना ? यानी - मेरे बीच के अंतर की समझ है mapऔर pathअधूरी है - या यह उन "छह में से एक, आधा दर्जन अन्य" चीजों में से एक है। या वहाँ कुछ अतिरिक्त व्यवहार Magento इसे इस तरह से हो जाता है।

विशिष्ट समस्या को हल करने के लिए नहीं, इससे पहले कि मैं इसके बारे में भारी लिखना शुरू करूं, आवश्यकताजेएस और मैगेंटो के कार्यान्वयन की किसी भी गलतफहमी को स्पष्ट करने के लिए कह रहा हूं :)

जवाबों:


24

इस पर थोड़ा और शोध करने के बाद, मैंने एक बड़ा अंतर पाया है mapऔर path। मुझे यकीन नहीं है कि अगर मैगेंटो कोर टीम इसका जानबूझकर उपयोग करती है, लेकिन इस स्टैक ओवरफ्लो जवाब के अनुसार जब आप mapकॉन्फ़िगरेशन को परिभाषित करते हैं, तो आप वास्तव में मैपिंग के लिए एक उपसर्ग को परिभाषित कर रहे हैं । यानी न केवल यह होगा

map: {
    '*': {
        editTrigger:   'mage/edit-trigger',
    }
}

लोडिंग सुनिश्चित करें कि editTriggerमॉड्यूल वास्तव में मॉड्यूल को लोड करता mage/edit-triggerहै, लेकिन यह भी कि मॉड्यूल editTrigger/fooलोड होगा mage/edit-trigger/foo

pathsनिर्देश एक उपसर्ग मानचित्रण नहीं है। यह एक साधारण से एक मैपिंग है।


1
इसके अलावा, अगर मैं सही ढंग से याद करता हूं, तो path: {foo: 'bar'}आपको barस्पष्ट रूप से आवश्यकता से ब्लॉक कर देगा और केवल इसे fooउपनाम द्वारा एक्सेस करने की अनुमति देगा ।
mms27
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.