मैगनेटो 2: मेरे मॉड्यूल के कंपोजर.जॉन में "सिमेंटिक वर्जनिंग" निर्भरता को कैसे निर्दिष्ट करें


10

Magento 2 के विकास और परिनियोजन में संस्करणकरण की एक औपचारिक प्रक्रिया शामिल है , जहाँ कोर Magento मॉड्यूल के प्रमुख और लघु संस्करणों को पीछे की ओर संगत सुविधाओं में परिवर्तन के आधार पर टकराया जाएगा।

मैं, Magento मॉड्यूल डेवलपर के रूप में, अपने कंपोज़र.जेसन फ़ाइल में आवश्यकताओं की सूची कैसे बनाऊं? क्या मुझे अपने मॉड्यूल को मैन्युअल रूप से देखने की आवश्यकता है हर बार जब मैं कोर मैगेंटो कोड का एक टुकड़ा उपयोग करता हूं और कंपोजर.जॉन के लिए एक require:...लाइन जोड़ता हूं ? या कोई स्वचालित उपकरण है जो मेरे लिए ऐसा कर सकता है?

मैं अपने में शामिल करने के लिए एक संस्करण कैसे निर्दिष्ट करूं composer.json? यह विशिष्ट मॉड्यूल संस्करण होना चाहिए जिसे मैंने विकसित किया है? या मुझे कुछ प्रकार के वाइल्डकार्ड शामिल करना चाहिए? या मुझे ट्रेडऑफ के आधार पर निर्णय लेने की आवश्यकता है? यदि हां, तो संस्करण निर्दिष्ट करने की प्रत्येक शैली के लिए ट्रेडऑफ़्स क्या शामिल हैं?

इस विशेषता का बहुत उच्च स्तर का वर्णन है जो वहाँ से बाहर घूम रहा है - लेकिन यह बहुत स्पष्ट नहीं है कि एक कामकाजी डेवलपर को यहां क्या व्यावहारिक कदम उठाने चाहिए, और / या उन चरणों के वास्तविक परिणाम क्या हैं।

जवाबों:


9

क्या मुझे अपने मॉड्यूल को मैन्युअल रूप से देखने की आवश्यकता है हर बार जब मैं कोर मैगेंटो कोड के एक टुकड़े का उपयोग करता हूं और एक आवश्यकता जोड़ देता हूं: ... संगीतकार ।जॉन को लाइन?

हां, आपके कोड में हर बार आप किसी भी कोर मॉड्यूल से किसी भी चीज का उपयोग करते हैं, जिसे आपको अपने संगीतकार की आवश्यकता में जोड़ना होता है। जैसा कि आप की संभावना है कि आपका लोड ऑर्डर कोर मॉड्यूल के बाद होना चाहिए, मैं इसे module.xmlअनुक्रम खंड में आपकी फ़ाइल में जोड़ने का भी सुझाव दूंगा ।

या कोई स्वचालित उपकरण है जो मेरे लिए ऐसा कर सकता है?

मैं अभी तक किसी के सामने नहीं आया हूं। अगर वहाँ है तो कृपया मुझे बताएं। यह एक बहुत ही परिष्कृत उपकरण होने की आवश्यकता होगी और इसके लिए पर्याप्त परीक्षण कवरेज की आवश्यकता होगी और फिर एक काम सेट का उत्पादन करने के लिए विभिन्न संस्करणों का एक मैट्रिक्स चलाता है।

मैं अपने कंपोज़र.जसन में शामिल करने के लिए संस्करण कैसे निर्दिष्ट करूं? यह विशिष्ट मॉड्यूल संस्करण होना चाहिए जिसे मैंने विकसित किया है? या मुझे कुछ प्रकार के वाइल्डकार्ड शामिल करना चाहिए? या मुझे ट्रेडऑफ के आधार पर निर्णय लेने की आवश्यकता है? यदि हां, तो संस्करण निर्दिष्ट करने की प्रत्येक शैली के लिए ट्रेडऑफ़्स क्या शामिल हैं?

एक संस्करण संख्या को परिभाषित करने के लिए विकल्प

  1. 100.0.2
    केवल तभी काम करें जब यह विशिष्ट संस्करण हो

  2. 100.0.*
    *एक वाइल्डकार्ड है और किसी भी संस्करण संख्या के साथ बदला जा सकता है 100.0.0, 100.0.1, ...,100.0.120

  3. ~100.0.2
    बनाता है 2 एक वाइल्डकार्ड है कि केवल इतने तक जा सकता है 100.0.2, 100.0.3, ...,100.0.120

  4. ^100.0.2
    किसी भी 101 तक जारी की अनुमति देता है तो 100.0.2, 100.0.3, ..., 100.1.0,100.2.5

2-4 विकल्पों के लिए यदि आपकी स्थिरता सेटिंग्स इसकी अनुमति देती हैं तो इसमें संस्करण भी शामिल होंगे 100.0.1-beta

प्रायोगिक उपयोग

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

विकल्प 2.) मुझे लगता है कि विकल्प 3 के रूप में गैर-विकल्प के रूप में सोचा जा सकता है। यदि आप इसे पसंद करते हैं ~100.0.0

विकल्प 3.) तब तक संगत रहें जब तक कि कोई नई सुविधाएँ पेश न की जाएं

विकल्प 4.) तब तक संगत रहें जब तक कोई ब्रेकिंग परिवर्तन नहीं लाया जाता है

व्यापार बंद

1 आपका एक्सटेंशन केवल एक Magento मॉड्यूल के 1 संस्करण के लिए काम करता है (तकनीकी रूप से अगर किसी मॉड्यूल में कोई परिवर्तन नहीं हैं तो संस्करण संख्या में वृद्धि नहीं होनी चाहिए और कई Magento प्रोजेक्ट संस्करण सैद्धांतिक रूप से समान संस्करण के साथ समान Magento कोर मॉड्यूल शामिल कर सकते हैं। व्यावहारिक रूप से I यह नहीं देखा है और ऐसा लगता है कि यह Magento के अंत में यहाँ देखने के लिए कुछ प्रक्रिया परिवर्तन की आवश्यकता है)। चूँकि आप Magento के कोर मॉड्यूल के 1 संस्करण के साथ इतने निकट से बंधे हैं कि आप बहुत सारे रिलीज़ और अपने स्वयं के एक्सटेंशन के संस्करणों के साथ समाप्त हो जाते हैं, यदि आप संगत रहना चाहते हैं।

3-4 आपका एक्सटेंशन Magento के कई संस्करणों के साथ काम करता है और आपको हर बार Magento का नया संस्करण जारी करते समय अपने एक्सटेंशन के विभिन्न संस्करणों को रिलीज़ करने की आवश्यकता नहीं है। यहाँ नकारात्मक पक्ष यह है कि आप संगतता का दावा करते हैं भले ही एक बदलाव मैजेंटो में पेश किया जा सकता है जो आपके अपने कोड के साथ असंगत है। यह जोखिम वास्तविक है क्योंकि मैगेंटो की अपने स्वयं के मॉड्यूल रिलीज के लिए अर्थ वर्जनिंग की परिभाषा केवल इसके सीमित दायरे के साथ @apiएनोटेशन (इस गिटहब मुद्दे पर इस पर अधिक ) के साथ चिह्नित है ।

tl; डॉ;
100.0.2इसे सुरक्षित रखें, आपके लिए बनाए रखने के लिए बहुत सारे रिलीज़,
^100.0.2सिमेंटिक वर्जनिंग यह कैसे काम करना चाहिए, आपके लिए कम रिलीज़ करता है, लेकिन वर्तमान में @apiएनोटेट वर्गों और विधियों के सीमित दायरे के कारण उच्च जोखिम के साथ । यदि आपके पास एक एक्सटेंशन था जो स्वीकृत वर्गों और विधियों का उपयोग करके 100% है तो यह स्पष्ट विकल्प होगा।


धन्यवाद, यह बहुत अच्छा है! त्वरित प्रश्न: क्या यह कहना सही है कि सटीक संस्करण निर्दिष्ट करने से आपके एक्सटेंशन के उन्नयन पर बहुत अधिक गारंटी होगी यदि / या जब Magento मॉड्यूल आपके संस्करण को बदलता है?
एलन स्टॉर्म

बहुत अच्छी तरह से सविस्तार !!!
संशोधन ईकॉमर्स

1
@AlanStorm हाँ यदि आप कंपोज़र अपडेट करते हैं (जो कि Magento के वेब सेटअप विज़ार्ड के तहत भी करता है) तो आपको कंपोज़र एरर मैसेज मिलेगा - इस ट्वीट में स्क्रीनशॉट देखें twitter.com/foomanNZ/status/737289877769302016
Foof

3

यह 0.1.0-alpha1 -> 0.1.0-alpha2, 0.1.0-alpha3,मॉड्यूल की स्थिरता के आधार पर पसंद किया जा सकता है । प्रलेखन में साझा किए जाने पर आवश्यकता कुछ इस प्रकार होगी: -

"require": {
    "myexamplestore/product-bundle": "2.0.0-RC1",
    "myexamplestore/acme-extension": "~1.0"
    }

आपके अपडेट के आधार पर, इसे अपडेट किया जाना चाहिए: -

"require": {
    "myexamplestore/product-bundle": "2.4.0-RC1",
    "myexamplestore/acme-extension": "~2.0"
    }

मुझे नहीं लगता कि अभी तक कोई स्वचालित प्रणाली है, लेकिन प्रलेखन के अनुसार इसका पालन करना बहुत महत्वपूर्ण है।

लेकिन अगर आपके मॉड्यूल में मामूली बग फिक्स हैं, तो आपको PATCH का उपयोग करना चाहिए।

को देखें

PATCH पिछड़े-संगत बग फिक्स को इंगित करता है

आप सही हैं उत्तर थोड़ा अस्पष्ट है, लेकिन आप देख सकते हैं कि इसे 1 वर्ष के आसपास अपडेट किया गया था। लेकिन यह है कि यह कैसे है।


जवाब देने के लिए धन्यवाद, हालांकि, यह पहले से मौजूद सभी अस्पष्ट जानकारी के बराबर है। यह स्पष्ट नहीं है कि आपके मॉड्यूल बनाम मैगेंटो मॉड्यूल क्या हैं। यह स्पष्ट नहीं है कि प्रत्येक संस्करण को समायोजित करने का परिणाम क्या है (एक अपग्रेड को ब्लॉक करें? एक अपग्रेड की अनुमति दें लेकिन @api जोखिम, आदि का परिचय दें)।
एलन स्टॉर्म

हां, मैं आपसे सहमत हूं, एक कारण जो मैं देख रहा हूं कि वे बहुत पुराने हैं।
संशोधन ईकॉमर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.