كيفية إصلاح خطأ Composer: "Your requirements could not be resolved to an installable set of packages"

عند العمل على مشاريع PHP واستخدام Composer لإدارة التبعيات الخاصة بك، قد تواجه رسالة الخطأ "Your requirements could not be resolved to an installable set of packages".

غالباً واجهت هذا الخطأ عدة مرات من قبل، ﻷنه يمكن أن يكون سببه مجموعة متنوعة من الأسباب.

أتذكر شعوري بالإرهاق وعدم معرفتي من أين أبدأ في المرة الأولى التي رأيته فيها. لذا، إذا كنت تشعر بنفس الطريقة، فلا بأس بذلك! في هذه المقالة، سنحلل الخطأ وننظر في بعض الأسباب والحلول الشائعة. بحلول نهاية المقالة، يجب أن يكون لديك فهم أفضل لما يسبب الخطأ وكيفية حله.

تعارضات بين إصدارات التبعيات

السبب الأكثر شيوعًا الذي أواجهه لهذا الخطأ هو تعارض بين الإصدارات المطلوبة للحزم. أميل إلى العثور على هذا عند ترقية تطبيق Laravel إلى أحدث إصدار من Laravel ولدي بعض الحزم المثبتة التي تتعارض مع أحدث إصدار. دعنا نأخذ ملف composer.json هذا كمثال:
{
"name": "ashallen/composer-test",
"require": {
"php": "^8.4",
"ashallendesign/short-url": "^7.0"
}
}
نرى أننا نطلب PHP ^8.4 و ashallendesign/short-url ^7.0. لنفترض أن الإصدار الدقيق من ashallendesign/short-url الذي نستخدمه هو v7.9.0. لنقل أننا نريد إضافة nesbot/carbon ^3.0 (مكتبة رائعة للتعامل مع التواريخ في PHP) كتبعية على مشروعنا. لسوء الحظ، ashallendesign/short-url v7.9.0 يدعم فقط nesbot/carbon ^2.0، ولكن تم إضافة الدعم لـ nesbot/carbon ^3.0 في v7.10.0. دعنا نحاول تثبيت nesbot/carbon ^3.0:
composer require nesbot/carbon:^3.0
سيؤدي تشغيل الأمر أعلاه إلى ظهور خطأ:
Running Composer update nesbot/carbon
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
 
Problem 1
- Root composer.json requires nesbot/carbon ^3.0, found nesbot/carbon[3.0.0, ..., 3.8.2] but these were not loaded, likely because it conflicts with another require.
Problem 2
- ashallendesign/short-url is locked to version v7.9.0 and an update of this package was not requested.
- ashallendesign/short-url v7.9.0 requires nesbot/carbon ~2.0 -> found nesbot/carbon[2.0.0, ..., 2.72.5] but it conflicts with your root composer.json require (^3.0).
 
Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.
 
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
واو! ما كل هذا؟ يمكن أن يكون هذا مرهقًا إذا كانت هذه هي المرة الأولى التي ترى فيها هذا الخطأ. لكنه ليس سيئًا كما يبدو، وهو في الواقع مفيد للغاية.

لنحلل رسالة الخطأ ثم ننظر في بعض الحلول. يمكننا بعد ذلك اتخاذ خطوات صغيرة ومنطقية لحل المشكلة. لا تريد اتخاذ أي قرارات كبيرة دون فهم الصورة الكاملة لأنك ستخاطر بتعطيل تطبيقك. يذكر قسم "المشكلة 1" من رسالة الخطأ أننا نحاول طلب nesbot/carbon ^3.0 ويعرض لنا الإصدارات المتاحة (v3.0.0 - v3.8.2). لكنه يخبرنا أنه لا يمكن تحميلها. على الرغم من أن هذا يبدو واضحًا لنا الآن لأننا حاولنا تثبيته للتو، إلا أن هذا يمكن أن يكون مفيدًا إذا كان الخطأ ناتجًا عن حزمة لا نطلبها مباشرةً ولم تكن متأكدًا من مكان التعارض. يخبرنا قسم "المشكلة 2" أن ashallendesign/short-url مقفل عند الإصدار v7.9.0 ويتطلب nesbot/carbon ~2.0. لذلك، لا يمكننا تثبيت سوى إصدارات من nesbot/carbon بين v2.0.0 و v2.72.5. هذه مشكلة لأننا نحاول طلب ^3.0. في هذه المرحلة، لدينا فهم لما يسبب التعارض: نريد ^3.0، لكن إحدى تبعياتنا تحتاج إلى ^2.0. هناك العديد من الحلول الممكنة للاختيار من بينها:

1. تحديث التبعية الموجودة لديك

في رأيي، فإن أفضل حل، على الأقل في هذا المثال، هو تحديث ashallendesign/short-url إلى إصدار يدعم nesbot/carbon ^3.0. كما ذكرت سابقًا، تم إضافة دعم nesbot/carbon ^3.0 في ashallendesign/short-url v7.10.0. هذا يعني أنه إذا قمنا بالترقية إلى الإصدار v7.10.0 على الأقل، فيجب أن نتمكن من طلب nesbot/carbon ^3.0. ربما تكون قد لاحظت في رسالة الخطأ أن Composer اقترح استخدام علم --with-all-dependencies. يسمح هذا العلم لـ Composer بتحديث الحزم الأخرى لحل التعارض تلقائيًا. دعنا نجربه:
composer require nesbot/carbon:^3.0 --with-all-dependencies
سيؤدي هذا الآن إلى تثبيت nesbot/carbon ^3.0 وتحديث ashallendesign/short-url إلى الإصدار v7.10.0. تذكر أنه بعد تحديث أي تبعيات، يجب عليك أن تقوم  بالتأكد من أن تطبيقك لا يزال يعمل كما هو متوقع. على الرغم من أن حزم PHP تعمل بشكل عام تبعاًَ  للإصدار الحالي (الذي تم تثبيته)، إلا أن هناك دائمًا احتمال حدوث شيء ما. لذلك، من الجيد وجود اختبارات لالتقاط أي مشاكل. أوصي بشدة أيضًا بوجود شكل من أشكال مراقبة الأخطاء في بيئة الإنتاج الخاصة بك. بهذه الطريقة، إذا تعطّل شيء ما، فسيتم إعلامك ويمكنك إصلاحه بسرعة.

2. استخدام إصدار أقدم من الحزمة الجديدة

قد يكون استخدام إصدار أقدم من الحزمة حلاً مناسبًا إذا لم تكن بحاجة إلى ميزات الإصدار الأحدث. قد ترغب في استخدام هذا النهج إذا لم يكن لدى حزمة ashallendesign/short-url إصدار أحدث يدعم nesbot/carbon ^3.0 حتى الآن. ومع ذلك، يجب أن تدرك أن هذا قد يؤدي إلى تفويت ميزات جديدة وإصلاحات للأخطاء وتحديثات أمان. إذا وجدت أنه لا يوجد إصدار أحدث من الحزمة يدعم الإصدار الذي تريد استخدامه، فيمكنك التواصل مع منسق الحزمة والسؤال عما إذا كانت لديه خطط لدعمه. يمكنك أيضًا التفكير في المساهمة في الحزمة إذا كان لديك الوقت والمعرفة. هذه طريقة رائعة لإعادة شيء للمجتمع والمساعدة في تحسين الحزمة للجميع مع تخفيف الضغط عن منسق الحزمة. لتثبيت nesbot/carbon ^2.0 لتلبية متطلبات ashallendesign/short-url v7.9.0، يمكنك تشغيل الأمر التالي:
composer require nesbot/carbon:^2.0

3. إزالة التبعية الموجودة

عادةً، لن ترغب في إزالة الحزمة التي تستخدمها بالفعل. إذا تم تثبيتها في مشروعك، فهذا يعني على الأرجح أنك تستخدمها لتوفير بعض الوظائف لتطبيقك. لذلك، قد يؤدي إزالته إلى حدوث مشكلات جديدة لأنك ستحتاج إلى العثور على بديل (إما عن طريق إنشائه بنفسك أو استخدام حزمة مختلفة). ولكن إذا وجدت أنك لا تستخدم الحزمة أو يمكنك العيش بدونها، فقد يكون إزالتها حلاً مناسبًا.

تعارضات بين إصدارات PHP

سبب شائع آخر لهذا الخطأ هو تعارض بين إصدار PHP المطلوب في ملف composer.json الخاص بك وإصدار PHP الذي تستخدمه لتثبيت الحزم. على سبيل المثال، لنفترض أننا نستخدم PHP 8.3 على جهازنا ولدينا ملف composer.json التالي: (ملاحظة: لقد أبقيت ملف composer.json بسيطًا لهذا المثال حتى نتمكن من التركيز على سبب الخطأ. في تطبيق حقيقي، سيكون لديك على الأرجح المزيد من التبعيات).
{
"name": "ashallen/composer-test",
"require": {
"php": "^8.4"
},
"require-dev": {
"phpunit/phpunit": "^11.5"
}
}
كما نرى في ملف composer.json، نطلب PHP ^8.4. لكننا نستخدم PHP 8.3 على جهازنا. لذلك، سيؤدي تشغيل composer install إلى ظهور الخطأ التالي:
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
 
Problem 1
- Root composer.json requires php ^8.4 but your php version (8.3.14) does not satisfy that requirement.
حل ممكن لإصلاح هذا الخطأ هو استخدام علم --ignore-platform-reqs عند تشغيل composer install. يخبر هذا العلم Composer بتجاهل متطلبات النظام الأساسي وتثبيت الحزم على أي حال.
composer install --ignore-platform-reqs
سيؤدي تشغيل الأمر أعلاه إلى تثبيت الحزم دون التحقق من إصدار PHP. ومع ذلك، لا أوصي عادةً بهذا النهج لأنه قد يتسبب في مشكلات أخرى لاحقًا. على سبيل المثال، قد تستخدم الحزم التي تقوم بتثبيتها ميزات محددة لـ PHP 8.4 لن تعمل مع PHP 8.3. في رأيي، أفضل طريقة لإصلاح هذا الخطأ هي تحديث إصدار PHP الخاص بك لتلبية إصدار PHP المطلوب في ملف composer.json الخاص بك. في هذه الحالة، ستقوم بتحديث إصدار PHP إلى 8.4. في عالم مثالي، سترغب في تشغيل نفس إصدار PHP بالضبط في بيئة عملك المحلية وفريقك وبيئة الإنتاج الخاصة بك. بهذه الطريقة، تعمل جميعًا على قدم المساواة ومن غير المرجح أن تواجه مشكلات تتعلق بإصدار PHP عند نشر تطبيقك.

ملخص

أتمنى أن تكون هذه المقالة قد أعطتك فهمًا أفضل لسبب ظهور خطأ "Your requirements could not be resolved to an installable set of packages" عند استخدام Composer. تذكر دائمًا التحقق من رسالة الخطأ للحصول على مزيد من المعلومات حول سبب المشكلة واتخاذ خطوات صغيرة ومنطقية لحلها. لا تتخذ أي قرارات كبيرة دون فهم الصورة الكاملة. كما ذكرت، تأكد من أن لديك مجموعة اختبارات لالتقاط أي مشاكل قد تنشأ بعد تحديث أو إضافة أو إزالة التبعيات.

جميع الحقوق محفوظة © 2025 Laravel | عربي