مدقّق الإصدارات الدلالية

تحقّق من صيغة SemVer وحلّل النطاقات.

ما الذي يُعدّ رقم إصدار

نحو SemVer 2.0.0 الصارم: ثلاثة أعداد صحيحة ASCII غير سالبة وبلا أصفار في البداية.

MAJOR.MINOR.PATCH
تغيير غير متوافق / إضافة متوافقة / إصلاح
1.2.3-alpha.1
نسخة قبل الإصدار، أسبقيتها أقل من 1.2.3
1.2.3+build.5
بيانات بناء، لا تدخل في الأسبقية
1.2.3-0.3
الأرقام داخل نسخة ما قبل الإصدار تُقارن كقيم
v1.2.3
ليس إصدارًا دلاليًا (نصّ الأسئلة الشائعة)
01.2.3
غير صالح: صفر في البداية
1.2.3-01
غير صالح: صفر في مُعرِّف رقمي
1.2.3+0.09
صالح: يُسمح بالأصفار في بيانات البناء

عوامل النطاق

1.2.3
هذا الإصدار بالضبط
^1.2.3
متوافق: >=1.2.3 <2.0.0-0
~1.2.3
تنقيح فقط: >=1.2.3 <1.3.0-0
>=1.2.3 <2.0.0
علاقة «و» داخل مجموعة واحدة
1.2.3 - 2.0.0
نطاق مغلق، والمسافة مطلوبة على الطرفين
1.2.x / 1.x / *
إصدارات جزئية وأحرف بديلة
a || b
اتحاد: تكفي مجموعة واحدة
~>1.2.3
اسم مستعار في npm ويُعامل مثل ~1.2.3

كيف تُكمل npm الإصدارات الجزئية

النتائج موافقة لقياسات node-semver، و-0 تستبعد نسخ ما قبل الإصدار من السلسلة التالية.

كيف تُكمل npm الإصدارات الجزئية
النطاقبعد التوسيع
^1.2.3>=1.2.3 <2.0.0-0
^0.2.3>=0.2.3 <0.3.0-0
^0.0.3>=0.0.3 <0.0.4-0
^1>=1.0.0 <2.0.0-0
~1.2.3>=1.2.3 <1.3.0-0
~1.2>=1.2.0 <1.3.0-0
~1>=1.0.0 <2.0.0-0
1.2.x>=1.2.0 <1.3.0-0
1.x>=1.0.0 <2.0.0-0
1.2.3 - 2.0.0>=1.2.3 <=2.0.0
1.2.3 - 2>=1.2.3 <3.0.0-0
>1.x>=2.0.0

أسبقية نسخ ما قبل الإصدار

1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0

المُعرِّفات الرقمية تُقارن كقيم وتأتي قبل الأبجدية، والمجموعة الأقصر أسبقية أقل. بيانات البناء لا تؤثر أبدًا.

أخطاء شائعة

أغلبها يُنسخ مباشرة من package.json أو من المحادثات.

١.٢.٣
أرقام عربية-هندية: الحرف الأول هو U+0661، وSemVer يقبل أرقام ASCII فقط من 0 إلى 9، ولا تجري أي مطابقة تلقائية.
1٫2٫3
فاصلة الكسر العربية U+066B تبدو كنقطة لكنها حرف غير مسموح.
v1.2.3
وسوم git تحمل v أما الإصدارات الدلالية فلا؛ npm المتساهل يقرأه 1.2.3.
1.2.3-01
صفر في مُعرِّف رقمي؛ يقرأه npm المتساهل 1.2.3-1 — وهذا بالضبط ما تعرضه أدوات أخرى على أنه صالح.

أي مرجاع نُعتمد

  • حكم رقم الإصدار هو SemVer 2.0.0 الصارم: لا وضع متساهل، ولا إعادة كتابة، ولا مطابقة تلقائية.
  • النطاقات تتبع node-semver الخاصة بـ npm، لأن مواصفة SemVer نفسها لا تُعرِّف النطاقات.
  • في النطاقات الأداة أشد من npm: لا تقبل بادئة v ولا الأصفار في البداية، وتعدّ الطرف الفارغ في || خطأً بدلًا من «أي إصدار».
  • القراءتان المعروضتان بجانب الإصدار غير الصالح تأتيان من semver.valid(v, {loose:true}) وsemver.coerce(v)، وهما للمعلومة فقط ولا تعنيان القبول.
  • المواضع تُعدّ بالنقاط الرمزية: من 1 في الواجهة، ومن 0 في JSON.

طريقة الاستخدام

  1. الصق رقم إصدار مثل 1.2.3-beta.1+build.5 في الخانة اليسرى؛ تتحدَّث النتائج أثناء الكتابة بلا أي زر.
  2. أضف نطاق npm مثل ^1.2.0 في الخانة اليمنى إن أردت علاقة الإصدار بالنطاق.
  3. اقرأ الشارة أولًا: هل الإصدار صالح؟ وإن لم يكن فأي قاعدة خُولفت وفي أي حرف.
  4. فعّل «تضمين نسخ ما قبل الإصدار» للحصول على قراءة npm بمنظار includePrerelease.
  5. وسِّع «نتيجة JSON» لنسخ أو تنزيل قائمة المشاكل كاملة.

مثال مُحلَّى

الإصدار + النطاق

١.٢.٣  ~1.2.3

النتيجة

الإصدار غير صالح: الحرف الأول U+0661 رقم عربي-هندي، ونحو SemVer يقبل أرقام ASCII فقط. النطاق ~1.2.3 يتوسّع إلى >=1.2.3 <1.3.0-0 ويبقى معزولًا من اليسار إلى اليمين داخل صفحة من اليمين إلى اليسار.

استبدله بـ 1.2.3 فيصبح صالحًا ويُستوفى النطاق.

القيود

  • الحكم صارم وفق SemVer 2.0.0، لذا يُرفض v1.2.3 و1.2.3-01 رغم أن وضع npm المتساهل يقبلهما أو يعيد كتابتهما.
  • النطاقات تنفّذ subset شائعًا من node-semver فقط، ولا تتناول git describe أو Cargo أو PEP 440 أو إصدارات Go module.
  • لا استعلام عن المستودعات: لا تخبر الأداة بأي إصدار سيُثبَّت فعلًا مع ^1.2.0.
  • إصدار واحد ونطاق واحد في كل مرة: لا دفعات، ولا ترتيب، ولا مقارنة بين إصدارين، ولا اقتراح للزيادة.
  • الأرقام التي تتجاوز Number.MAX_SAFE_INTEGER تُوسم وتُقارن كنص، ولا تُحوَّل إلى قيمة عددية.
  • بلا شبكة وبلا تخزين وبلا سجل: التحديث يمسح كل شيء، والإدخال يبقى في ذاكرة الصفحة.

أدوات أخرى للمطوّر تعمل داخل المتصفح بالكامل.