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 بلطف بسحب أحدث إصدار مستقر. يبدو هذا جيدًا، أليس كذلك؟ الأمر بسيط: اليوم المكتبة تعمل، وغدًا يصدر مؤلفها تحديثًا رئيسيًا بتغييرات تكسر الكود الخاص بك تمامًا. مرحبًا بك في جحيم التصحيح!
تثبيت الإصدار (pinning) هو بوليصة التأمين الخاصة بك. أنت تقول بوضوح: "Composer، قم بتثبيت هذا الإصدار بالضبط، ولا تجرؤ على لمسه دون علمي". هذا يؤثر بشكل مباشر على استقرار وأداء التطوير، لأنك تقضي وقتك في كتابة الكود، وليس في التعامل مع مفاجآت التحديثات.
\n\nكيفية تثبيت إصدار معين من الحزمة؟ ثلاث طرق مشروعة
\n\nدعنا ننتقل إلى التطبيق العملي. لدينا ثلاثة سيناريوهات رئيسية، ولكل منها طريقته الخاصة.
\n\nالطريقة 1: "التثبيت السريع" عبر composer require
\n\nالطريقة الأسرع والأكثر شيوعًا. كل ما عليك فعله هو إضافة الإصدار المطلوب بعد اسم الحزمة باستخدام النقطتين الرأسيتين.
\n\nالصيغة:
\ncomposer require vendor/package:الإصدار\n\nمثال واقعي: لنفترض أنك بحاجة إلى Monolog الإصدار 2.3.5 (وليس أحدث إصدار 3.x الذي غيّر واجهة API).
\ncomposer require monolog/monolog:2.3.5\n\nماذا يحدث تحت الغطاء؟ يقوم Composer بـ:
\n- \n
- التحقق من عدم وجود تعارضات مع الحزم المثبتة بالفعل. \n
- إضافة إدخال في ملف
composer.json. \n - تنزيل هذا الإصدار بالضبط وتحديث ملف
composer.lock. \n
مهم! إذا كنت تريد تثبيت حزمة موجودة بالفعل ولكن بإصدار مختلف، استخدم العلم --no-update للتحسين:
composer require monolog/monolog:2.3.5 --no-update\ncomposer update monolog/monolog\nهذا الأسلوب يقلل العبء على Composer ويسرع العملية، لأنه لن يعيد حساب جميع التبعيات، بل سيركز فقط على الحزمة المطلوبة.
\n\nالطريقة 2: "الإدارة اليدوية" عبر composer.json
\n\nهذه الطريقة مفضلة عندما تعمل ضمن فريق أو تقوم بإعداد مشروع من الصفر. تفتح ملف composer.json وتكتب التبعيات يدويًا.
ابحث عن القسم "require" وأضف السطر:
{\n "require": {\n "php": "^8.1",\n "monolog/monolog": "2.3.5",\n "guzzlehttp/guzzle": "7.4.*"\n }\n}\n\nبعد تحرير الملف، نفّذ الأمر:
\ncomposer update\n\nهذه الطريقة تمنحك تحكمًا كاملاً. لاحظ أقنعة الإصدارات:
\n- \n
2.3.5— إصدار دقيق تمامًا. \n7.4.*— أي إصدار ضمن الإصدار الفرعي 7.4 (7.4.0, 7.4.1