لماذا يعتبر الإصدار الدقيق للحزمة قوة خارقة للمطور؟
\n\nتخيل: أنت تعمل على مشروع PHP، كل شيء يعمل بسرعة، الكود جميل، العملاء سعداء. فجأة — يظهر خطأ. تبحث في الكود، وتجد أن هناك تبعية لمكتبة تم تحديثها بشكل غير ملحوظ إلى إصدار رئيسي. وكل شيء تعطل. هل هذا مألوف؟ إذا كان الأمر كذلك، فهذه المقالة لك.
\n\nاليوم سنشرح كيفية تثبيت إصدار محدد من الحزمة عبر Composer — الأداة الرئيسية لإدارة التبعيات في PHP. ولكن ليس فقط "كيف"، بل مع التركيز على التحسين والأداء. لأن الإصدار الصحيح للحزمة لا يعني فقط الاستقرار، بل أيضًا سرعة تطبيقك.
\n\nبالمناسبة، هذا السؤال هو من أكثر الأسئلة شيوعًا على Stack Overflow (آلاف المشاهدات!). وليس من المستغرب: كل مطور PHP ثانٍ وقع في مشكلة عدم توافق الإصدارات مرة واحدة على الأقل.
\n\nما هو Composer ولماذا تثبيت الإصدارات؟
\n\nComposer هو مدير التبعيات لـ PHP. يسمح لك بإضافة المكتبات والأطر والأدوات بأمر واحد. لكن لديه ميزة واحدة: إذا لم تحدد إصدارًا محددًا، فسيأخذ آخر إصدار مناسب. وهذا قد يكون محفوفًا بالمخاطر.
\n\nتخيل: أنت تستخدم monolog/monolog لتسجيل الأخطاء. في ملف composer.json الخاص بك مكتوب:
"require": {\n "monolog/monolog": "^2.0"\n}\n\nالرمز ^ يعني "أي إصدار من 2.0 إلى 3.0 (بدون تضمين)". إذا صدر إصدار 2.5 مع تغييرات جوهرية — قد ينهار مشروعك. لذلك تثبيت إصدار محدد هو أساس الموثوقية.
كيفية تثبيت إصدار محدد من الحزمة: ثلاث طرق عملية
\n\nدعنا نصل إلى صلب الموضوع فورًا. إليك ثلاث طرق موثوقة ستستخدمها يوميًا.
\n\nالطريقة 1: أمر composer require مع تحديد الإصدار
\n\nأسهل وأسرع طريقة هي استخدام المفتاح --with-dependencies وتحديد الإصدار صراحة:
composer require "vendor/package:1.2.3" --with-dependencies\n\nمثال للحزمة الشائعة guzzlehttp/guzzle:
composer require "guzzlehttp/guzzle:7.4.5" --with-dependencies\n\nماذا يحدث؟ يقوم Composer بتنزيل الإصدار 7.4.5 بالضبط، ويسحب تبعياته ويحدث ملفي composer.json و composer.lock. انتهى. أنت محمي من المفاجآت.
نصيحة للأداء: استخدم العلم --no-dev إذا كانت الحزمة مطلوبة فقط في بيئة الإنتاج. سيقلل ذلك من عدد الملفات التي يتم تنزيلها:
composer require "guzzlehttp/guzzle:7.4.5" --no-dev\n\nالطريقة 2: التحرير اليدوي لملف composer.json
\n\nإذا كنت تعمل بالفعل في مشروع وتريد تغيير الإصدار، افتح ملف composer.json واكتب الإصدار الدقيق:
{\n "require": {\n "monolog/monolog": "2.8.0",\n "guzzlehttp/guzzle": "7.4.5"\n }\n}\n\nثم قم بتنفيذ:
\n\ncomposer update vendor/package\n\nأو لجميع الحزم:
\n\ncomposer install\n\nهام: إذا كنت تقوم بتحديث حزمة واحدة فقط، استخدم composer update vendor/package، وليس composer update بدون معلمات. وإلا سيقوم Composer بتحديث جميع التبعيات، مما قد يؤدي إلى تغييرات غير متوقعة.
الطريقة 3: استخدام أسماء مستعارة للإصدارات (aliases)
\n\nأحيانًا تحتاج إلى تثبيت إصدار لم يتم وضع علامة عليه بعد، مثل فرع dev-master. لهذا استخدم الأسماء المستعارة:
composer require "vendor/package:dev-master#abc123"\n\nأو في composer.json:
{\n "require": {\n "vendor/package": "dev-master"\n },\n "repositories": [\n {\n "type": "vcs",\n "url": "http