টুল
গাইড

SemVer পার্সার ও তুলনাকারী

ডেভ

সিমান্টিক ভার্সন পার্স, তুলনা এবং রেঞ্জ-যাচাই করুন — ^, ~, >=, <, x-রেঞ্জ এবং || সমর্থিত।

100% ক্লায়েন্ট-সাইড কোনো ব্যাকএন্ড নেই

দূরবর্তী URL আনা হয় না; আপনার JSON সরাসরি পেস্ট করুন।

উদাহরণ
ভার্সন A
মেজর
মাইনর
প্যাচ
প্রি-রিলিজ
বিল্ড
ভার্সন B
মেজর
মাইনর
প্যাচ
প্রি-রিলিজ
বিল্ড
তুলনা
পরিবর্তন:
রেঞ্জ যাচাই
A
B
এই পৃষ্ঠায়

সিমান্টিক ভার্সন পার্সার কী?#

সিমান্টিক ভার্সনিং (SemVer) হলো major.minor.patch রীতি যা বেশিরভাগ লাইব্রেরি একটি রিলিজ কী ধরনের পরিবর্তন ধারণ করে তা সংকেত করতে ব্যবহার করে: একটি বাগ ফিক্স patch বাম্প করে, পশ্চাৎ-সামঞ্জস্যপূর্ণ সংযোজন minor বাম্প করে, এবং ব্রেকিং পরিবর্তন major বাম্প করে। একটি প্রি-রিলিজ ট্যাগ (1.0.0-beta.1) বা বিল্ড মেটাডেটা (+exp.sha.1) যোগ করুন এবং আপনি semver.org 2.0.0-এ সংজ্ঞায়িত সম্পূর্ণ ব্যাকরণ পান।

সমস্যা হলো “দুটি ভার্সন তুলনা করুন” এবং “এই ভার্সনটি কি আমার নির্ভরতা রেঞ্জ সন্তুষ্ট করে” চোখ দিয়ে ভুল পাওয়া সহজ। 1.0.0 বেশি নাকি 1.0.0-beta কম? (বেশি — একটি রিলিজ সর্বদা তার প্রি-রিলিজকে ছাড়িয়ে যায়।) 1.2.3 কি ^1.2.0 সন্তুষ্ট করে? (হ্যাঁ।) এটি কি ~1.2.0 সন্তুষ্ট করে? (এছাড়াও হ্যাঁ, কিন্তু একটি কঠোরতর কারণে।) এই পৃষ্ঠাটি ভার্সনগুলোকে স্পেক যেভাবে সংজ্ঞায়িত করে তেমনভাবে পার্স করে, আপনাকে উপাদানগুলো দেখায়, অগ্রাধিকার অনুযায়ী দুটি ভার্সন তুলনা করে, এবং রেঞ্জ ক্যোয়ারির উত্তর দেয় একই ^ / ~ / >= / || / হাইফেন সিনট্যাক্স সহ যা একটি package.json ব্যবহার করে — সব স্থানীয়ভাবে, একটি অনুমানের বদলে প্রকৃত নিয়মের বিপরীতে।

কীভাবে ব্যবহার করবেন#

  1. সাধারণ উদাহরণ ফেলতে উপরের উদাহরণ বোতামগুলো ব্যবহার করুন, বা সরাসরি টাইপ করুন।
  2. দুটি ইনপুটে ভার্সন A এবং ভার্সন B লিখুন। একটি শীর্ষস্থ v বা = গৃহীত এবং ছাঁটা হয়; 1.2.3-beta.1+build.42-কে তার অংশে পার্স করা হয়।
  3. আপনি যদি একটি সন্তুষ্টি চেক চান তবে একটি রেঞ্জ এক্সপ্রেশন লিখুন। ডিফল্ট হলো ^1.2.0 || >=2.0.0 <3.0.0 — দুটি OR’d সেট, যেভাবে প্রকৃত নির্ভরতা রেঞ্জ লেখা হয়। সমর্থিত সিনট্যাক্স: ^ (ক্যারেট), ~ (টিল্ড), >= <= > < =, x / X / * ওয়াইল্ডকার্ড, আংশিক ভার্সন (1.2), - হাইফেন রেঞ্জ, এবং সেট OR করতে ||
  4. দুটি পার্স কার্ড পড়ুন। প্রতিটি ক্যানোনিকাল clean ফর্ম এবং ভাঙা মেজর, মাইনর, প্যাচ, প্রি-রিলিজ, এবং বিল্ড ফিল্ড দেখায়। একটি অবৈধ ভার্সন তার কার্ডটিকে একটি বার্তা সহ লাল করে তোলে।
  5. তুলনা কার্ড পড়ুন। এটি অগ্রাধিকার অনুযায়ী A < B, A = B, বা A > B সাজায়, প্লাস diff — সর্বোচ্চ উপাদান যা পরিবর্তিত হয়েছে (মেজর, মাইনর, প্যাচ, প্রি-রিলিজ, বা বিল্ড)।
  6. রেঞ্জ যাচাই কার্ড পড়ুন। এটি আপনাকে বলে, আপনার টাইপ করা রেঞ্জের জন্য, A এটি সন্তুষ্ট করে কি না এবং B এটি সন্তুষ্ট করে কি না।

প্রধান বৈশিষ্ট্য#

  • স্পেক অনুযায়ী অগ্রাধিকার। তুলনা major.minor.patch ধরে চলে এবং তারপর প্রি-রিলিজ শনাক্রকারীগুলো, এই নিয়ম সহ যে একটি ভার্সন প্রি-রিলিজ ছাড়া সর্বদা সহ একটিকে ছাড়িয়ে যায়। সংখ্যাসূচক শনাক্রকারী সংখ্যাত্মকভাবে তুলনা করে (beta.2 < beta.11); আলফানিউমেরিকগুলো লেক্সিক্যালি তুলনা করে; এবং সংখ্যাসূচক সর্বদা আলফানিউমেরিকের নিচে র‌্যাঙ্ক করে। বিল্ড মেটাডেটা পার্স করা এবং প্রদর্শিত হয় কিন্তু কখনো অগ্রাধিকারকে প্রভাবিত করে না।
  • ক্যারেট এবং টিল্ড, সঠিকভাবে ডিসুগারড। ^1.2.3 হয়ে যায় >=1.2.3 <2.0.0; ^0.2.3 হয়ে যায় >=0.2.3 <0.3.0; ^0.0.3 হয়ে যায় >=0.0.3 <0.0.4 — ক্যারেটের “বাম-সর্বাধিক-অ-শূন্য” নিয়ম। টিল্ড একই মাইনরে পিন করে: ~1.2.3 হলো >=1.2.3 <1.3.0
  • ||, হাইফেন এবং ওয়াইল্ডকার্ড সহ রেঞ্জ। ^1.0.0 || >=2.0.0 <3.0.0 (দুটি সেটের OR), 1.2.0 - 1.5.0 (ইনক্লুসিভ হাইফেন রেঞ্জ), 1.x / 1.2.* (ওয়াইল্ডকার্ড রেঞ্জ) সবগুলো পার্স এবং টেস্ট করে।
  • প্রি-রিলিজ ইনক্লুশন গেট। একটি প্রি-রিলিজ ভার্সন একটি রেঞ্জ সন্তুষ্ট করতে পারে কেবল যখন একই সেটের কোনো তুলনাকারী একই major.minor.patch-এ একটি প্রি-রিলিজ ট্যাগ বহন করে। তাই 1.5.0-rc.1 ^1.2.0 সন্তুষ্ট করে না, কিন্তু ^1.5.0-rc.0 সন্তুষ্ট করে — যেভাবে প্রকৃত প্যাকেজ ম্যানেজারগুলো এলোমেলো প্রি-রিলিজগুলোকে আপনার রিলিজ বিল্ড থেকে দূরে রাখে।
  • একটি গল্প বলে এমন diff। diff ফিল্ডটি সর্বোচ্চ উপাদান রিপোর্ট করে যা পরিবর্তিত হয়েছে, তাই 1.2.3 থেকে 2.0.0-তে একটি লাফ মেজর দেখায়, এবং 1.0.0 থেকে 1.0.0-তে পরিবর্তিত বিল্ড সহ বিল্ড দেখায় যদিও অগ্রাধিকার অপরিবর্তিত।
  • ক্ষমাশীল ইনপুট। শীর্ষস্থ v, একটি শীর্ষস্থ =, এবং চারপাশের সাদাসিধে সহ্য করা হয়, তাই একটি git ট্যাগ বা একটি চ্যাঞ্জলগ থেকে কপি করা ভার্সন ম্যানুয়াল ক্লিনআপ ছাড়াই পার্স করে।

ব্যবহারের উদাহরণ#

ডিফল্টগুলো সহ — A 1.2.3, B 2.0.0, রেঞ্জ ^1.2.0 || >=2.0.0 <3.0.0 — পৃষ্ঠাটি রিপোর্ট করে:

A clean    1.2.3        (major 1, minor 2, patch 3)
B clean    2.0.0        (major 2, minor 0, patch 0)
compare    1.2.3  <  2.0.0
diff       major
range      A satisfies   B satisfies

উভয় ভার্সনই রেঞ্জ সন্তুষ্ট করে, কিন্তু ভিন্ন কারণে: A প্রথম OR সেটের ভেতরে পড়ে (^1.2.0>=1.2.0 <2.0.0), B দ্বিতীয়টির ভেতরে পড়ে (>=2.0.0 <3.0.0)। B-কে 3.0.0-এ পরিবর্তন করুন এবং তার ব্যাজ সন্তুষ্ট করে না-তে ফ্লিপ হয় — উপরের বাউন্ড <3.0.0 এটিকে বাদ দেয়।

প্রি-রিলিজ নিয়ম ক্রিয়ায় দেখতে, A-কে 1.5.0-rc.1 এবং B-কে 1.5.0-তে সেট করুন, এবং রেঞ্জ ^1.5.0-rc.0 হিসেবে রাখুন। এখন A সন্তুষ্ট করে (একই 1.5.0, রেঞ্জ একটি মেলানো প্রি-রিলিজ ট্যাগ বহন করে), যখন একটি সরল ^1.5.0 1.5.0-rc.1-কে মাধ্যমে যেতে দেবে না — গেটটি সুনির্দিষ্টভাবে রিলিজ প্রার্থীদের রিলিজ নির্ভরতা সমাধান থেকে দূরে রাখার জন্য বিদ্যমান যতক্ষণ না আপনি অপ্ট-ইন করেন।

প্রশ্নোত্তর#

1.0.0 কি 1.0.0-beta-এর চেয়ে বেশি?#

হ্যাঁ। কোনো প্রি-রিলিজ ট্যাগ ছাড়া একটি ভার্সনের সর্বদা একটি প্রি-রিলিজ ট্যাগ সহ ভার্সনের চেয়ে বেশি অগ্রাধিকার থাকে, একই major.minor.patch-এও। তাই 1.0.0 > 1.0.0-rc.1 > 1.0.0-beta.11 > 1.0.0-alpha। এই কারণে একটি রিলিজ “গোল্ড হওয়া” একটি প্রকৃত অগ্রাধিকার বাম্প, কেবল একটি লেবেল পরিবর্তন নয়।

^ এবং ~-এর মধ্যে পার্থক্য কী?#

ক্যারেট এমন আপডেট অনুমোদন করে যা বাম-সর্বাধিক-অ-শূন্য উপাদান পরিবর্তন করে না: ^1.2.3 যেকোনো 1.x.x-কে 1.2.3 থেকে (কিন্তু অন্তর্ভুক্ত নয়) 2.0.0 পর্যন্ত অনুমোদন করে। টিল্ড কঠোরতর — এটি একটি সম্পূর্ণ ভার্সন দিলে মাইনরকে পিন করে: ~1.2.3 কেবল 1.2.x অনুমোদন করে। কেবল একটি মেজর দিলে (~1), টিল্ড এবং ক্যারেট উভয়ই সম্পূর্ণ মেজর রেঞ্জ অনুমোদন করে। বেশিরভাগ লাইব্রেরি ^ দিয়ে পিন করে; আপনার নিজের প্রকাশিত প্যাকেজগুলোতে প্যাচগুলো প্রায়শই ~ ব্যবহার করে।

আমার প্রি-রিলিজ ভার্সন কেন ^1.0.0 সন্তুষ্ট করে না?#

ডিজাইন অনুযায়ী। 1.5.0-rc.1-এর মতো একটি প্রি-রিলিজ কেবল তখনই একটি রেঞ্জ সন্তুষ্ট করে যখন একই AND-সেটের কোনো তুলনাকারীর একই 1.5.0-এ একটি প্রি-রিলিজ ট্যাগ থাকে। ^1.0.0 1.5.0-তে কোনো প্রি-রিলিজ ছাড়া >=1.0.0 <2.0.0-0-এ ডিসুগার করে, তাই গেটটি আপনার রিলিজ বিল্ডকে কারো এলোমেলো রিলিজ প্রার্থী টানতে থেকে আটকায়। আপনি অপ্ট-ইন করতে চাইলে, স্পষ্টভাবে ^1.5.0-rc.0 লিখুন।

বিল্ড মেটাডেটা কি তুলনাকে প্রভাবিত করে?#

না। 1.0.0+exp.sha.5 এবং 1.0.0+exp.sha.6-এর সমান অগ্রাধিকার আছে — বিল্ড মেটাডেটা কেবল শনাক্রকরণের জন্য। পার্সারটি এখনও এটি দেখায় (এবং diff শুধুমাত্র মেটাডেটা আলাদা হলে একটি বিল্ড পরিবর্তন রিপোর্ট করে), কিন্তু এটি কখনো একটি অর্ডারিং স্থির করে না।