php كلمات - ما الفرق بين الطلب والمتطلب؟




html title (4)

أنا جديد على composer ، وأود أن أعرف الفرق بين الطلب require-dev . لا يقدم موقع الملحن شرحًا جيدًا للفرق بين هذين الاثنين.

الجزء الذي لا أحصل عليه هو Lists packages required for developing this package, or running tests, etc. من الملحن الوثائق الرسمية.


Answers

الحزم require-dev هي الحزم غير الضرورية لكي يعمل مشروعك ولا يجب تضمينها في إصدار الإنتاج الخاص بمشروعك.

عادة ما تكون هذه الحزم مثل phpunit/phpunit التي لا تستخدمها إلا أثناء التطوير.


يبدو واضحا لي:

تطلب

قوائم الحزم المطلوبة من قبل هذه الحزمة. لن يتم تثبيت الحزمة ما لم يمكن تلبية هذه المتطلبات.

يتطلب-ديف (الجذر فقط)

قوائم الحزم المطلوبة لتطوير هذه الحزمة (1) ، أو تشغيل الاختبارات ، إلخ. سيتم تثبيت متطلبات dev للحزمة الجذر فقط إذا تم تشغيل --dev مع --dev أو إذا تم تشغيل التحديث بدون --no-dev .

http://getcomposer.org/doc/04-schema.md

1. الحزم المستخدمة لتطوير حزمة


والفارق الرئيسي هو أن الملحن سيعمل على تثبيت تبعيات الطلب فقط من أجل "حزمة الجذر" - الدليل الذي تقوم بتشغيل composer install . تصف الوثائق هذا على النحو التالي:

حزمة الجذر هي الحزمة المحددة من قِبل composer.json في بداية المشروع. هذا هو composer.json الرئيسي الذي يحدد متطلبات مشروعك.

... وتحدد وثائق require-dev أنه "الجذر فقط".

في الممارسة العملية ، هذا يعني أنه لا يتم استخدام تبعيات require-dev حزمة إذا تم تثبيت الحزمة كـ تبعية لشيء آخر (أي يتم تثبيته إلى مجلد vendor آخر للمشروع).

حتى إذا كان لديك phpunit في قائمة require-dev لـ YourProject ، وقمت باستنساخ YourProject وقمت بتشغيل برنامج composer install في yourproject/ directory ، سيقوم الملحن بتثبيت phpunit على phpunit yourproject/vendor/ ، لأنه من المحتمل أن أقوم ببعض التطوير على YourProject . كجزء من تطوير التطوير ، سأحتاج على الأرجح إلى تشغيل برنامج اختبار YourProject ، ولفعل ذلك سوف أحتاج إلى phpunit .

ولكن ، إذا قمت بإضافة YourProject على أنه تبعية لـ MyProject ، فإن تثبيت حزمة myproject سيؤدي إلى تثبيت حزمة myproject أيضًا ، ولكنه لن يقوم بتثبيت phpunit .

يمكنك تجاوز هذا السلوك باستخدام --dev و - --dev --no-dev ، ولكن يستند السلوك الافتراضي إلى ما إذا كانت الحزمة المعنية هي الحزمة الجذر .


أجد أنه من المشكوك فيه أن أقول أقل ما كنت تتطور مع أحدث PHP المتاحة وتعمل على إنتاج مع نسخة قديمة جدا. سيكون هناك الكثير من المشاكل المحتملة الناجمة عن هذا ، ليس فقط بسبب بقع الأمان التي قد تكون مفقودة ، ولكن الأهم من ذلك بسبب إصلاحات أخطاء PHP التي تم تقديمها في الغالب في الإصدارات 5.3.9 و 5.3.23 التي تغير سلوك PHP في بعض تفاصيل جميلة بشكل أساسي. لا نتحدث عن خطر استخدام ميزات 5.4 أو 5.5 بطريق الخطأ.

وليس هناك حقاً وسيلة للتعامل مع هذا الملحن. إن إصدار PHP الذي يتم استخدامه عند تشغيل composer update يحدد دقة التبعيات ، ويتأثر بإصدار PHP وإضافات PHP المثبتة.

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

هناك على الأرجح ثلاث طرق واضحة:

  1. خفض بيئة التطوير إلى إصدار الإنتاج الذي تستخدمه حقًا. إذا تم استخدام أكثر من واحد: الأقدم. وبهذه الطريقة سيتم مطابقة أي متطلبات لنسخ PHP. قم بتشغيل composer update ، ثم انتهيت.

  2. قم بترقية بيئة الإنتاج الخاصة بك. لا يحتاج إلى مزيد من التوضيح ، ولكن لا بد لي من الإشارة إلى أنه ليس لديك الكثير من ميزات PHP الرائعة فحسب ، بل إنك تفقد أيضًا زيادة كبيرة في الأداء ، لأن PHP 5.5 هو في الواقع أسرع بكثير من 5.3.

  3. أضف تهيئة "platform.php" إلى composer.json على مستوى العالم أو للمشروع. سيخبر هذا الملحن بتخطي إصدار PHP الذي يقوم بتشغيل الملحن نفسه ، وبدلا من ذلك حساب التبعيات مع هذا الإصدار PHP المختلفة. composer config -g platform.php 5.3.5 للإعداد العام (سيؤثر على جميع تشغيلات الملحن) ، بدون -g المحلية (سيؤثر فقط على عمليات الملحن في هذا المشروع ، في حالة تطويرك على أكثر من مشروع مع إنتاج مختلف إصدارات PHP).





php installation composer-php