इस लेख में
सिमेंटिक वर्ज़निंग क्या है?
सिमेंटिक वर्ज़निंग (SemVer) एक वर्ज़निंग योजना है जो किसी वर्ज़न नंबर के हर हिस्से को एक अर्थ देती है। Tom Preston-Werner द्वारा बनाया गया SemVer केवल वर्ज़न नंबर के ज़रिए सॉफ़्टवेयर बदलावों की प्रकृति और प्रभाव बताने के लिए एक सार्वभौमिक परंपरा प्रदान करता है।
SemVer का पालन करके, डेवलपर और उपयोगकर्ता तुरंत समझ सकते हैं कि कोई अपडेट टूटने वाले बदलाव लाता है, नई सुविधाएँ लाता है, या बग फ़िक्स — बस वर्ज़न नंबर पढ़कर। आधुनिक सॉफ़्टवेयर परितंत्रों में निर्भरता प्रबंधन के लिए यह पूर्वानुमेयता बेहद अहम है।
SemVer फ़ॉर्मैट
एक सिमेंटिक वर्ज़न में बिंदुओं से अलग किए गए तीन संख्यात्मक घटक होते हैं: MAJOR.MINOR.PATCH।
- MAJOR — तब बढ़ाया जाता है जब आप असंगत API बदलाव करते हैं। 1.x.x से 2.0.0 पर जाना यह संकेत देता है कि मौजूदा कोड टूट सकता है
- MINOR — तब बढ़ाया जाता है जब आप बैकवर्ड-संगत तरीके से कार्यक्षमता जोड़ते हैं। 1.2.x से 1.3.0 पर जाने का मतलब है मौजूदा को तोड़े बिना नई सुविधाएँ
- PATCH — तब बढ़ाया जाता है जब आप बैकवर्ड-संगत बग फ़िक्स करते हैं। 1.2.3 से 1.2.4 पर जाने का मतलब है केवल बग ठीक किए गए
- हर घटक एक ग़ैर-ऋणात्मक पूर्णांक होना चाहिए और उसमें आगे शून्य नहीं होने चाहिए (1.02.3 अमान्य है)
निःशुल्क आज़माएँ — कोई साइनअप आवश्यक नहीं
कोई SemVer स्ट्रिंग वैलिडेट करें →वर्ज़न रेंज और शर्तें
पैकेज मैनेजर संगत निर्भरता वर्ज़न तय करने के लिए वर्ज़न रेंज का उपयोग करते हैं। भरोसेमंद बिल्ड के लिए इन रेंज को समझना बेहद ज़रूरी है।
- कैरेट रेंज (^1.2.3) — ऐसे बदलावों की अनुमति देती है जो सबसे बाईं ग़ैर-शून्य अंक को न बदलें। ^1.2.3 का मतलब है 1.2.3 से लेकर 2.0.0 तक (पर उसे शामिल किए बिना) कोई भी वर्ज़न
- टिल्ड रेंज (~1.2.3) — केवल patch-स्तर के बदलावों की अनुमति देती है। ~1.2.3 का मतलब है 1.2.3 से लेकर 1.3.0 तक (पर उसे शामिल किए बिना) कोई भी वर्ज़न
- सटीक वर्ज़न (1.2.3) — केवल वही विशिष्ट वर्ज़न स्वीकार्य है, कोई लचीलापन नहीं
आम उपयोग के मामले
सिमेंटिक वर्ज़निंग आधुनिक पैकेज प्रबंधन और रिलीज़ वर्कफ़्लो की बुनियाद है।
- npm, pip और Cargo — पैकेज मैनेजर निर्भरता वृक्ष सुलझाने और टूटने वाले बदलावों को प्रोडक्शन तक पहुँचने से रोकने के लिए SemVer पर निर्भर करते हैं
- CI/CD पाइपलाइन — स्वचालित सिस्टम बिल्ड ट्रिगर करने, रिलीज़ प्रकाशित करने और चेंजलॉग बनाने के लिए SemVer टैग का उपयोग करते हैं
- API वर्ज़निंग — REST API विकसित होते हुए बैकवर्ड संगतता बनाए रखने के लिए URL में मुख्य वर्ज़न (v1, v2) का उपयोग करते हैं
- लाइब्रेरी लेखक — सही SemVer के साथ लाइब्रेरी प्रकाशित करना उपभोक्ताओं को संकेत देता है कि अपग्रेड कब सुरक्षित हैं
प्री-रिलीज़ और बिल्ड मेटाडेटा
SemVer दो वैकल्पिक विस्तारों का समर्थन करता है जो वरीयता नियमों को प्रभावित किए बिना वर्ज़न नंबरों में संदर्भ जोड़ते हैं।
- प्री-रिलीज़ पहचानकर्ता — एक हाइफ़न के बाद जोड़े जाते हैं: 1.0.0-alpha, 1.0.0-beta.2, 1.0.0-rc.1। ये उन वर्ज़नों को दर्शाते हैं जो अभी स्थिर नहीं हैं और संबंधित रिलीज़ से कम वरीयता रखते हैं
- बिल्ड मेटाडेटा — एक जोड़ चिह्न के बाद जोड़ा जाता है: 1.0.0+build.123, 1.0.0-beta+exp.sha.5114f85। वर्ज़न वरीयता निर्धारित करते समय बिल्ड मेटाडेटा को अनदेखा किया जाता है
- प्री-रिलीज़ वर्ज़न बिंदु से अलग किए गए पहचानकर्ताओं के आधार पर क्रमबद्ध होते हैं: संख्यात्मक पहचानकर्ता संख्या के अनुसार क्रमबद्ध होते हैं, अल्फ़ान्यूमेरिक पहचानकर्ता शब्दकोश क्रम में
अक्सर पूछे जाने वाले सवाल
क्या 0.x.x को 1.x.x से अलग माना जाता है?
हाँ। SemVer में, वर्ज़न 0.x.x शुरुआती विकास को दर्शाता है जहाँ कुछ भी किसी भी समय बदल सकता है। सार्वजनिक API को स्थिर नहीं माना जाना चाहिए। एक बार जब आप 1.0.0 रिलीज़ कर देते हैं, तो आप बाद की सभी रिलीज़ के लिए SemVer नियमों का पालन करने के लिए प्रतिबद्ध हो जाते हैं।
क्या मैं उपसर्ग के रूप में v का उपयोग कर सकता हूँ (v1.2.3)?
SemVer विनिर्देश में v उपसर्ग शामिल नहीं है — मानक फ़ॉर्मैट 1.2.3 है। हालाँकि, कई टूल (Git टैग, GitHub रिलीज़) परंपरागत रूप से v1.2.3 का उपयोग करते हैं। अधिकांश वैलिडेटर दोनों रूप स्वीकार करते हैं।
अगर मैं किसी टूटने वाले बदलाव के लिए मुख्य वर्ज़न बढ़ाना भूल जाऊँ तो क्या होगा?
कैरेट रेंज इस्तेमाल करने वाले उपभोक्ताओं को अपडेट अपने-आप मिल जाएगा, और उनके बिल्ड अप्रत्याशित रूप से टूट सकते हैं। यही वजह है कि SemVer अनुशासन बेहद अहम है — यह लाइब्रेरी लेखकों और उपभोक्ताओं के बीच एक सामाजिक अनुबंध है।