تحديث تثبيت Cargo: كيفية تحديث صناديق الباينري في Rust

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

«Cargo install» موجود، لكن «cargo update» غير موجود؟ ألم مألوف لكل مطور Rust

\n\n

لقد قمت للتو بتشغيل cargo install ripgrep للحصول على ملف ثنائي جديد rg. مر أسبوع. تسمع أنه تم إصدار إصدار جديد — 14.1.0 بدلاً من 13.0.0. وهنا يطرح سؤال منطقي: «هل يحتوي cargo install على أمر تحديث مكافئ؟»

\n\n

هذا السؤال حصد آلاف المشاهدات على Stack Overflow. وليس من دون سبب. الأمر هو أنه لا يوجد في cargo أمر مدمج cargo install update. لا، لم تصب بالعمى. بالفعل لا يوجد. لكن هذا لا يعني أنك محكوم عليك بتنزيل الإصدارات الجديدة يدويًا. هناك عدة طرق، وسنشرحها جميعًا — من البسيطة إلى الأنيقة.

\n\n

في هذه المقالة، لن نترجم الإجابة من Stack Overflow فقط. بل سنقارن بين الأساليب، ونعرض كودًا حقيقيًا، ونقدم نصائح قابلة للتنفيذ. هيا بنا!

\n\n

لماذا لا يوجد أمر «update» في Cargo للصناديق المثبتة؟

\n\n

قبل أن نبدأ في البحث عن الأخطاء، دعنا نفهم الفلسفة. cargo install مصمم لتثبيت صناديق الباينري (تلك التي تحتوي على قسم [[bin]] في ملف Cargo.toml الخاص بها). هذا ليس مدير حزم على غرار apt أو npm. Cargo هو في المقام الأول أداة بناء ومدير تبعيات للمشاريع، وليس مثبت برامج عالمي.

\n\n

أمر cargo update موجود، لكنه يعمل داخل المشروع — يقوم بتحديث التبعيات في ملف Cargo.lock. بالنسبة للملفات الثنائية المثبتة عالميًا، هناك حاجة إلى حل آخر.

\n\n

الطريقة رقم 1: إعادة التثبيت الكلاسيكية (cargo install --force)

\n\n

الطريقة الأبسط والأكثر وضوحًا هي إعادة تثبيت الصندوق باستخدام العلم --force:

\n\n
# التثبيت الأول\ncargo install ripgrep\n\n# بعد أسبوع — التحديث\ncargo install --force ripgrep\n
\n\n

ماذا يحدث تحت الغطاء؟ يقوم Cargo بتنزيل أحدث إصدار من الصندوق من crates.io، ويعيد بنائه، ويستبدل الملف الثنائي. العلم --force يجبر على استبدال الملف الموجود، حتى لو كان الإصدار هو نفسه.

\n\n

الإيجابيات:

\n
    \n
  • لا يتطلب تثبيت أدوات إضافية
  • \n
  • يعمل دائمًا وفي كل مكان
  • \n
  • بديهي وسهل الفهم
  • \n
\n\n

السلبيات:

\n
    \n
  • في كل مرة إعادة ترجمة كاملة (تستغرق وقتًا طويلاً إذا كان الصندوق كبيرًا)
  • \n
  • لا يوجد تحقق مما إذا كان قد تم إصدار إصدار جديد — أنت فقط تعيد التثبيت
  • \n
  • غير مريح إذا كان لديك 10+ صناديق مثبتة
  • \n
\n\n

هذا يشبه إعادة تثبيت Windows لتحديث برنامج تشغيل. هل يعمل؟ نعم. هل هو الأمثل؟ لا.

\n\n

الطريقة رقم 2: cargo-outdated — كاشف ذكي للصناديق القديمة

\n\n

إذا كنت تريد التأكد من أن التحديث ضروري، فقم بتثبيت cargo-outdated:

\n\n
cargo install cargo-outdated\n
\n\n

الآن تحقق من الصناديق القديمة:

\n\n
cargo outdated --root ~/.cargo\n
\n\n

سيظهر الإخراج شيئًا مثل:

\n\n
Package    Current  Latest  Deps\nripgrep    13.0.0   14.1.0  -\nbat        0.22.1   0.23.0  -\n
\n\n

ثم يمكنك تحديث صندوق معين عبر cargo install --force. لكن هذه لا تزال خطوتين. هل تريد أتمتة؟ تابع القراءة.

\n\n

الإيجابيات:

\n
    \n
  • يظهر فقط الصناديق القديمة حقًا
  • \n
  • يعمل أيضًا مع تبعيات المشروع
  • \n
  • يحتوي على خيارات للتصفية
  • \n
\n\n

السلبيات:

\n
    \n
  • لا يقوم بالتحديث بنفسه — فقط يخطر
  • \n
  • يتطلب تثبيتًا منفصلاً
  • \n
\n\n

الطريقة رقم 3: cargo-update (نعم، يوجد مثل هذا الصندوق!)

\n\n

الإجابة الأكثر أناقة على سؤال «هل يحتوي cargo install على أمر تحديث مكافئ؟» هي

المدونات

توصيات الكتب