node.js - update - npm شرح




ما هو الفرق بين التلدة(~) و الإقحام(^) في package.json؟ (10)

في أبسط الشروط ، تتطابق التلدة مع أحدث نسخة ثانوية (الرقم الأوسط). ~ 1.2.3 سوف تطابق جميع إصدارات 1.2.x ولكن سوف يغيب 1.3.0.

حرف الإقحام ، من ناحية أخرى ، أكثر استرخاء. ستقوم بتحديث لك إلى الإصدار الرئيسي الأحدث (الرقم الأول). ^ 1.2.3 سوف يتطابق مع أي إصدار 1.xx بما في ذلك 1.3.0 ، ولكنه سيصمد عند 2.0.0.

http://fredkschott.com/post/2014/02/npm-no-longer-defaults-to-tildes/

لاحظ أن المصطلحات الخاصة بالمؤلف مضللة إلى حد ما: عندما يقول "أحدث إصدار ثانوي" لـ ~ يعني "أحدث إصدار من التصحيح في الإصدار الثانوي المحدد". وبالمثل لـ ^ ، يجب قراءة "أحدث إصدار رئيسي" على أنه "أحدث إصدار ثانوي في الإصدار الرئيسي المحدد".

بعد أن قمت بالترقية إلى أحدث node مستقرة و npm ، حاولت npm install moment --save . يحفظ الإدخال في package.json ببادئة caret(^) . سابقا ، كان بادئة tilde(~) .

  1. لماذا يتم إجراء هذه التغييرات في npm ؟
  2. ما هو الفرق بين tilde(~) و caret(^) ؟
  3. ما هي المزايا على الآخرين؟

Semver

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
  • استخدام semver.npmjs.com للاختبار. (على الرغم من أن التفسيرات لـ ^ (تتضمن كل شيء أكبر من نسخة معينة في نفس النطاق الرئيسي) و ~ (تتضمن كل شيء أكبر من إصدار معين في نفس النطاق الثانوي) ليست صحيحة 100٪ ، فإن الآلة الحاسبة تعمل بشكل جيد )
  • بدلاً من ذلك ، استخدم SemVer Check بدلاً من ذلك ، الأمر الذي لا يتطلب منك اختيار حزمة كما تقدم تفسيرات.

السماح أو عدم السماح بالتغييرات

  • دبوس الإصدار: 1.2.3 .
  • استخدم ^ (مثل الرأس). يسمح بالتحديثات في المستوى الثاني غير الصفر من اليسار: ^0.2.3 يعني 0.2.3 <= v < 0.3 .
  • استخدم ~ (مثل الذيل). تجميد عمومًا لمستوى أقصى اليمين أو تعيين صفر إذا تم تجاهله:
    • ~1 تعني 1.0.0 <= v < 2.0.0
    • ~1.2 تعني 1.2.0 <= v < 1.3.0 .
    • ~1.2.4 تعني 1.2.4 <= v < 1.3.0 .
  • Ommit أقصى مستوى الحق: 0.2 يعني 0.2 <= v < 1 . يختلف عن ~ بسبب:
    • بداية مستوى المستوى المحذوف هو دائما 0
    • يمكنك ضبط بداية النسخة الرئيسية دون تحديد sublevels.

كل الاحتمالات (نأمل)

تعيين بدء مستوى رئيسي والسماح بالتحديثات للأعلى

*  or "" (empty string)   any version
1                         v >= 1

تجميد المستوى الرئيسي

~0 (0)            0.0 <= v < 1
0.2               0.2 <= v < 1          // Can't do that with ^ or ~ 
~1 (1, ^1)        1 <= v < 2
^1.2              1.2 <= v < 2
^1.2.3            1.2.3 <= v < 2
^1.2.3-beta.4     1.2.3-beta.4 <= v < 2

تجميد المستوى الثانوي

^0.0 (0.0)        0 <= v < 0.1
~0.2              0.2 <= v < 0.3
~1.2              1.2 <= v < 1.3
~0.2.3 (^0.2.3)   0.2.3 <= v < 0.3
~1.2.3            1.2.3 <= v < 1.3

تجميد مستوى التصحيح

~1.2.3-beta.4     1.2.3-beta.4 <= v < 1.2.4 (only beta or pr allowed)
^0.0.3-beta       0.0.3-beta.0 <= v < 0.0.4 or 0.0.3-pr.0 <= v < 0.0.4 (only beta or pr allowed)
^0.0.3-beta.4     0.0.3-beta.4 <= v < 0.0.4 or 0.0.3-pr.4 <= v < 0.0.4 (only beta or pr allowed)

عدم السماح بالتحديثات

1.2.3             1.2.3
^0.0.3 (0.0.3)    0.0.3

إشعار : مفقود رئيسي أو ثانوي أو تصحيح أو تحديد beta بدون رقم ، هو نفسه any مستوى مفقود.

ملاحظة : عندما تقوم بتثبيت حزمة تحتوي على 0 كمستوى رئيسي ، سيعمل التحديث على تثبيت إصدار مستوى بيتا / pr جديد فقط! هذا لأن npm يعين ^ كافتراضي في package.json وعندما يكون الإصدار المثبت مثل 0.1.3 ، فإنه يتجمد جميع المستويات الرئيسية / الثانوية / التصحيح.


أرغب في إضافة وثائق npmjs الرسمية أيضًا والتي تصف جميع طرق خصوصية الإصدار بما في ذلك تلك المشار إليها في السؤال -

https://docs.npmjs.com/files/package.json

https://docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-

  • ~version "مكافئ تقريبًا للإصدار" انظر npm semver - Tilde Ranges & semver (7)
  • ^version "متوافق مع الإصدار" انظر npm semver - Caret Ranges & semver (7)
  • version يجب أن تطابق النسخة بالضبط
  • >version يجب أن يكون الإصدار أكبر من الإصدار
  • >=version الخ
  • <version
  • <=version
  • 1.2.x 1.2.0 و 1.2.1 وما إلى ذلك ، ولكن ليس 1.3.0
  • http://sometarballurl (قد يكون هذا هو عنوان URL الخاص بالتريببول الذي سيتم تنزيله وتثبيته محليًا
  • * يتطابق مع أي إصدار
  • latest يحصل على أحدث إصدار

القائمة أعلاه ليست شاملة. تتضمن محددات الإصدار الأخرى GitHub urls و GipHub user repo ، والمسارات والحزم المحلية ذات علامات npm محددة


ربما كنت قد رأيت التيلدا (~) و caret (^) في package.json. ما الفرق بينهم؟

عندما تقوم بتثبيت لحظة npm - حفظ ، فإنه يحفظ الإدخال في package.json مع البادئة (^) علامة الإقحام.

التلدة (~)

في أبسط العبارات ، تتطابق التيلدا (~) مع الإصدار الثانوي الأخير (الرقم الأوسط). ~ 1.2.3 سوف تطابق جميع إصدارات 1.2.x ولكن سوف يغيب 1.3.0.

علامة الإقحام (^)

حرف الإقحام (^) ، على الجانب الآخر ، أكثر استرخاء. ستقوم بتحديث لك إلى الإصدار الرئيسي الأحدث (الرقم الأول). ^ 1.2.3 سوف يتطابق مع أي إصدار 1.xx بما في ذلك 1.3.0 ، ولكنه سيصمد عند 2.0.0.

المرجع: https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b


يسمح Npm بتثبيت إصدار أحدث من الحزمة أكثر من الإصدار المحدد. استخدام tilde ( ~ ) يمنحك إصدارات bug fix و caret ( ^ ) يمنحك وظيفة جديدة متوافقة أيضًا.

المشكلة هي أن الإصدارات القديمة لا تتلقى عادة إصلاحات للأخطاء بدرجة كبيرة ، لذلك يستخدم npm علامة الإقحام ( ^ ) كإعداد افتراضي لـ - --save .

وفقًا لـ: "شرح Semver - لماذا يوجد علامة إقحام (^) في الحزمة الخاصة بي. json؟" .

لاحظ أن القواعد تنطبق على الإصدارات أعلاه 1.0.0 وليس كل مشروع يتبع الإصدارات الدلالية. للإصدارات 0.xx يسمح حرف الإقحام بالتحديثات فقط ، أي أنه يتصرف بنفس طريقة التلدة. انظر "نطاقات الإقحام"

فيما يلي شرح مرئي للمفاهيم:

المصدر: "Cheatingheet الإصدار الأحدث" .


يمكن اعتبار مطابقة القبعات "مكسورة" لأنها لن يتم تحديثها من ^0.1.2 إلى 0.2.0 . عند ظهور البرنامج ، استخدم الإصدارات 0.xy ومطابقة القبعة فقط تطابق آخر رقم متغير ( y ). يتم ذلك عن قصد. والسبب هو أنه في حين أن البرنامج يتطور بسرعة API التغييرات: يوم واحد لديك هذه الأساليب وفي اليوم الآخر لديك تلك الأساليب وتختفي القديمة. إذا كنت لا تريد كسر الشفرة للأشخاص الذين يستخدمون مكتبتك بالفعل ، فقم بزيادة الإصدار الرئيسي: على سبيل المثال 1.0.0 -> 2.0.0 -> 3.0.0 . لذا ، وبحلول الوقت الذي يتم فيه تنفيذ برنامجك تمامًا بنسبة 100٪ وسيظهر تمامًا مثل الإصدار 11.0.0 ولا يبدو هذا الأمر ذا معنى كبيرًا ، وفي الواقع يبدو مربكًا. من ناحية أخرى ، إذا كنت تستخدم 0.1.x -> 0.2.x -> 0.3.x من البرنامج بنسبة 100٪ ويتم عرضه تمامًا كإصدار 1.0.0 ويعني ذلك "هذا الإصدار عبارة عن خدمة طويلة الأمد ، يمكنك المتابعة واستخدام هذا الإصدار من المكتبة في رمز الإنتاج ، ولن يغير المؤلف كل شيء غدًا ، أو الشهر المقبل ، ولن يتخلى عن الحزمة".

القاعدة هي: استخدام الإصدار 0.xy عند عدم نضوج البرنامج بعد 0.xy مع زيادة الرقم الأوسط عند تغيير واجهة برمجة التطبيقات (API) العامة (وبالتالي لن يحصل الأشخاص الذين لديهم ^0.1.0 على تحديث 0.2.0 وفزنا) ر كسر التعليمات البرمجية). وبعد ذلك ، عند نضوج البرنامج ، قم بتحريره تحت 1.0.0 وقم بزيادة الرقم في أقصى اليسار كلما تغيرت واجهة API العامة (وبالتالي لن يحصل الأشخاص الذين لديهم ^1.0.0 على تحديث 2.0.0 ولن يكسر رمزهم).

Given a version number MAJOR.MINOR.PATCH, increment the:

MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.

~ : قريبة بشكل معقول

   ~1.1.5: 1.1.0 <= accepted < 1.2.0

^ : متوافق مع

   ^1.1.5: 1.1.5 <= accepted < 2.0.0

   ^0.1.3: 0.1.3 <= accepted < 0.2.0

   ^0.0.4: 0.0.4 <= accepted < 0.1.0

~ بإصلاح الأرقام الرئيسية والثانوية. يتم استخدامه عندما تكون مستعدًا لقبول إصلاح الأخطاء في التبعية ، ولكنك لا تريد أي تغييرات قد تكون غير متوافقة.

^ إصلاح العدد الرئيسي فقط. يتم استخدامه عند مشاهدة تبعياتك عن كثب وتكون جاهزًا لتغيير التعليمة البرمجية بسرعة إذا كان الإصدار الثانوي غير متوافق.

بالإضافة إلى ذلك ، لا تدعم ^ npm الإصدارات القديمة ، ويجب استخدامها بحذر.

لذا ، يعد ^ الإعداد الافتراضي جيدًا ، ولكنه ليس مثاليًا. أقترح أن تختار وتهيئ مشغّل سيمفير الأكثر فائدة لك.


تيلدا (~)

الإصدار الرئيسي ثابت ، يتم إصلاح الإصدار الثانوي ، يتطابق مع أي رقم بناء

"express": "~4.13.3" 

~4.13.3 يعني أنه سيتحقق من 4.13.x حيث x هو أي شيء و 4.14.0

الإقحام (^)

الإصدار الرئيسي ثابت ، يطابق أي إصدار ثانوي ، يطابق أي رقم بناء

"supertest": "^3.0.0"

^3.0.0 يعني أنه سيتحقق من 3.xx حيث x هو أي شيء


شرح واحد الخطوط الملاحية المنتظمة

نظام الإصدار القياسي هو major.minor.build (على سبيل المثال 2.4.1)

يقوم npm بفحص وإصلاح إصدار حزمة معينة استنادًا إلى هذه الأحرف

~ : الإصدار الرئيسي ثابت ، الإصدار الثنائي ثابت ، يتطابق مع أي رقم بناء

على سبيل المثال: ~ 2.4.1 يعني أنه سيتحقق من 2.4.x حيث x هو أي شيء

^ : الإصدار الرئيسي ثابت ، يطابق أي إصدار ثانوي ، يطابق أي رقم بناء

على سبيل المثال: ^ 2.4.1 يعني أنه سيتحقق من 2.xx حيث x هو أي شيء





npm