ترويض التبعيات: كيفية تثبيت إصدار معين من حزمة Composer

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

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

ابدأ الدورة

Composer: فن إدارة التبعيات في PHP

\n\n

تخيل أنك مهندس معماري يبني ناطحة سحاب. لا يمكنك تصنيع كل لبنة وكل عارضة بنفسك. أنت تطلب مواد جاهزة ومختبرة. في عالم PHP، يقوم Composer بهذا الدور ببراعة - مدير التبعيات الذي جلب إلى عالمنا النظام، والتحكم في الإصدارات، وإمكانية عدم إعادة اختراع العجلة في كل مرة.

\n\n

ولكن ماذا تفعل إذا كان أحدث إصدار من المكتبة "يكسر" الكود الخاص بك؟ أو إذا كنت تعرف يقينًا أن الإصدار 2.1.5 كان يعمل بشكل مثالي، بينما الإصدار 2.2.0 جلب أخطاء لم يتم إصلاحها بعد؟ في هذه المقالة، لن نجيب فقط على السؤال الشائع على Stack Overflow: "How to install a specific version of package using Composer؟". سنقوم بتفكيك هذه العملية بالكامل، مع إضافة لمسة من سحر التحسين وزيادة أداء مشروعك.

\n\n

جهّز الطرفية الخاصة بك، فلنبدأ!

\n\n

لماذا تثبيت الإصدار ليس رفاهية بل ضرورة؟

\n\n

العديد من المطورين، خاصة المبتدئين، يرتكبون نفس الخطأ: يكتبون composer require vendor/package دون تحديد الإصدار. في هذه الحالة، سيقوم Composer بلطف بسحب أحدث إصدار مستقر. يبدو هذا جيدًا، أليس كذلك؟ الأمر بسيط: اليوم المكتبة تعمل، وغدًا يصدر مؤلفها تحديثًا رئيسيًا بتغييرات تكسر الكود الخاص بك تمامًا. مرحبًا بك في جحيم التصحيح!

\n\n

تثبيت الإصدار (pinning) هو بوليصة التأمين الخاصة بك. أنت تقول بوضوح: "Composer، قم بتثبيت هذا الإصدار بالضبط، ولا تجرؤ على لمسه دون علمي". هذا يؤثر بشكل مباشر على استقرار وأداء التطوير، لأنك تقضي وقتك في كتابة الكود، وليس في التعامل مع مفاجآت التحديثات.

\n\n

كيفية تثبيت إصدار معين من الحزمة؟ ثلاث طرق مشروعة

\n\n

دعنا ننتقل إلى التطبيق العملي. لدينا ثلاثة سيناريوهات رئيسية، ولكل منها طريقته الخاصة.

\n\n

الطريقة 1: "التثبيت السريع" عبر composer require

\n\n

الطريقة الأسرع والأكثر شيوعًا. كل ما عليك فعله هو إضافة الإصدار المطلوب بعد اسم الحزمة باستخدام النقطتين الرأسيتين.

\n\n

الصيغة:

\n
composer require vendor/package:الإصدار
\n\n

مثال واقعي: لنفترض أنك بحاجة إلى Monolog الإصدار 2.3.5 (وليس أحدث إصدار 3.x الذي غيّر واجهة API).

\n
composer require monolog/monolog:2.3.5
\n\n

ماذا يحدث تحت الغطاء؟ يقوم Composer بـ:

\n
    \n
  • التحقق من عدم وجود تعارضات مع الحزم المثبتة بالفعل.
  • \n
  • إضافة إدخال في ملف composer.json.
  • \n
  • تنزيل هذا الإصدار بالضبط وتحديث ملف composer.lock.
  • \n
\n\n

مهم! إذا كنت تريد تثبيت حزمة موجودة بالفعل ولكن بإصدار مختلف، استخدم العلم --no-update للتحسين:

\n
composer require monolog/monolog:2.3.5 --no-update\ncomposer update monolog/monolog
\n

هذا الأسلوب يقلل العبء على Composer ويسرع العملية، لأنه لن يعيد حساب جميع التبعيات، بل سيركز فقط على الحزمة المطلوبة.

\n\n

الطريقة 2: "الإدارة اليدوية" عبر composer.json

\n\n

هذه الطريقة مفضلة عندما تعمل ضمن فريق أو تقوم بإعداد مشروع من الصفر. تفتح ملف composer.json وتكتب التبعيات يدويًا.

\n\n

ابحث عن القسم "require" وأضف السطر:

\n
{\n    "require": {\n        "php": "^8.1",\n        "monolog/monolog": "2.3.5",\n        "guzzlehttp/guzzle": "7.4.*"\n    }\n}
\n\n

بعد تحرير الملف، نفّذ الأمر:

\n
composer update
\n\n

هذه الطريقة تمنحك تحكمًا كاملاً. لاحظ أقنعة الإصدارات:

\n
    \n
  • 2.3.5 — إصدار دقيق تمامًا.
  • \n
  • 7.4.* — أي إصدار ضمن الإصدار الفرعي 7.4 (7.4.0, 7.4.1

المدونات

توصيات الكتب