يوم جيد
عندما تعاملت مع الملحن لأول مرة ، قمت برسم ورقة غش صغيرة لنفسي والآن ، بعد فترة ، أقدمها للجمهور بشكل معدّل قليلاً.
هذا المنشور مناسب لأولئك الذين ، لأول مرة ، واجهوا مدير حزمة لا غنى عنه لـ PHP.
لذلك ، الملحن هو مدير حزمة PHP.
ما هو الملحن وأبسط مثال على استخدامه؟
خذ
هذا المشروع كمثال.
باختصار: هذه مجموعة من البرامج النصية للعمل في VK API
وفقا لذلك ، لتشغيل هذه البرامج النصية تحتاج إلى عدة مكتبات
يتم سرد المكتبات في ملف composer.json - وهو ملف رئيسي عند العمل مع الملحن
مثال لحن الملحن: json:

يستخدم هذا المشروع 5 مكتبات. وفقًا لذلك ، إذا قرر أحد المطورين نشر هذا المشروع على github ، فعليه فقط إسقاط مجلد البرنامج النصي في اللفت وإنشاء comper.json ، والذي سيصف المكتبات اللازمة للعمل في هذا المشروع. البساطة واضحة: في اللفت ، لا تحتاج إلى سحب جميع المكتبات اللازمة مع المقطورة بعد الملفات. يستغرق مساحة أقل ، من السهل توزيع المشروع.
مثال العمل:
قم بتنزيل المشروع

في مجلد البرامج النصية توجد نصوص مباشرة للمشروع ، والتي تتطلب هذه الحزم الخمس.
نبدأ تثبيت الحزم:

بعد التثبيت ، يظهر مجلد البائع ، حيث تتم إضافة الحزم المثبتة ويتم تشكيل ملف autoload.php

نحن نربط هذا الملف بالمشروع وهذا كل شيء - المكتبات متصلة ، يمكنك العمل بأمان معهم.

البساطة واضحة: لا تحتاج إلى تنزيل المكتبات وتوصيلها وتوابعها بنفسك ، فالمؤلف سيقوم بكل شيء من أجلك. وهذه الحزمة بأكملها متصلة بملف autoload.php واحد
تتم إضافة كافة الحزم الموجودة في البائع إلى أداة التحميل التلقائي. في القيام بذلك ، يعتمد الملحن على ملفات composer.json ، والتي يجب أن تحتوي كل حزمة عليها. إن تكوين حزمة composer.json هي مهمة مطور الحزمة ؛ يحتاج مستهلك الحزمة فقط إلى الوصف في مشروع composer.json الذي يحتاج إلى توصيل الحزم.
هذا مثال على مشروع composer.json:

هذا مثال على حزمة composer.json:

في قسم المتطلبات ، يتم تسجيل تبعية هذه الحزمة - مكتبة http guzzle ، وهي ضرورية لمكتبة getjump / vk. في هذه الحالة ، أي من وجهة نظر المستهلك من الحزم ، فإن جميع أنواع تبعيات الحزمة ليست "شاغلنا" ، سوف الملحن معرفة التبعيات نفسها.
يتم تسجيل مساحة اسم الحزمة في قسم التحميل التلقائي.

getjump \\ Vk \\ - اسم مساحة الاسم
src / getjump / Vk / - الدليل حيث توجد الملفات مع فئات الحزمة
العمل مع هذه المكتبة في المشروع:

يُعد Core and Friends فصول مكتبة تم وضعها وتسجيلها في مجلد src وفقًا لمعايير PSR-4. مرة أخرى ، تشكيل بنية الحزمة هو مهمة منشئ الحزمة.
يكفي بالنسبة لنا ، بصفتنا مستهلك الحزمة ، التسجيل في مشروعنا
تشمل "../vendor/autoload.php" ؛
وجميع هذه الفئات ومساحات الأسماء ستعمل على ما يرام.
في هذه الحالة ، لا نحتاج إلى عناء وكتابة autoloader. سيقوم الملحن بذلك بنفسه عند تشغيل الأمر install.
التثبيت
تثبيت الملحن على الصعيد العالمي
1) تحتاج أولاً إلى المسار إلى الدليل باستخدام مترجم PHP لتسجيله في مسار متغير البيئة.
تحقق مما إذا كان هذا هو الحال:
فب-الإصدار

إذا كان الاستنتاج مثل هذا ، فيمكنك تخطي هذه الخطوة
على سبيل المثال ، ويندوز 7
النظام -> إعدادات النظام المتقدمة -> متقدم -> متغيرات البيئة
بعد ذلك ، سنهتم بمتغير المسار:

أدخل المسار إلى المترجم


* منذ العصور القديمة ، لدي مجموعة xampp على جهاز الكمبيوتر الخاص بي ، ليست هناك حاجة إلى التجميع نفسه هنا ، لكن المترجم منه مناسب تمامًا (إصدار PHP - 5.6).
2) إعادة تشغيل المحطة.
إنشاء دليل وتثبيت الملحن (أضع على القرص D)
د:
قرص مضغوط /
مقدر بن
بن مؤتمر نزع السلاح
php -r "readfile ('https://getcomposer.org/installer')؛" | فب
صدى
php "٪ ~ dp0composer.phar"٪ *> composer.bat

3) إضافة المسار إلى composer.bat إلى مسار متغير البيئة ، على سبيل المثال ل D: \ bin يجب أن تعمل:

بالإضافة إلى ذلك يمكن أن تضاف إلى المسار
D: \ Users \٪ userName٪ \ AppData \ Roaming \ Composer \ vendor \ bin \
لجعله أكثر ملاءمة لاستخدام الأدوات المثبتة عالميا من خلال الملحن.
(لدي مجلد المستخدمون الموجود على محرك الأقراص D ، وتم إنشاء رمز ارتباط على C له).
هذا كل شيء ، تم تثبيت الملحن وجاهز للذهاب.
آخر: أثناء التثبيت ، يمكنك التقاط خطأ
[RuntimeException]
يجب تعيين متغير البيئة APPDATA أو COMPOSER_HOME لكي يعمل الملحن بشكل صحيح
تم العثور على الحل هنا
github.com/composer/composer/issues/2033أضف متغير APPDATA بالقيمة D: \ Users \ GSU \ AppData \ Roaming

تثبيت الملحن محليا
هناك خيار لتثبيت الملحن محليًا ، ولكن في معظم الحالات لا توجد حاجة واضحة لذلك.
ومع ذلك ، التثبيت أبسط هنا.
بسبب لم يتم تثبيت البرنامج على مستوى العالم ، فأنت بحاجة إلى ملف تمهيد (برنامج صغير للملحن) ، لتحميله نكتب الأمر:
php -r "readfile ('https://getcomposer.org/installer')؛" | فب
الآن يظهر الملف composer.phar في دليل المشروع
كل شيء يمكن استخدامه.
php composer.phar تتطلب [اسم الحزمة]
الاختلافات بين التثبيت العالمي والمحلي
تعمل الأوامر بشكل مختلف للتثبيتات المحلية والعالمية:
على سبيل المثال:
محليا: php composer.phar تتطلب silex / silex ~ 1.1
على الصعيد العالمي: الملحن يتطلب silex / silex ~ 1.1
عند التثبيت محليًا ، يجب تنزيل ملف التثبيت إلى مجلد المشروع الحالي في كل مرة
php -r "readfile ('https://getcomposer.org/installer')؛" | فب
في التثبيت العمومي ، هذا الملف غير مطلوب. يبدأ الملحن في أي دليل حالي.
فرق
تثبيت - تثبيت الحزم المنصوص عليها في composer.json
حزم التحديث - التحديث
dumpautoload - إعادة بناء autoloader
تتطلب somepackage / somepackage: someversion - إضافة حزمة جديدة (افتراضياً ، يتم تثبيت الحزم من المستودع الرسمي). أثناء التثبيت ، تتم كتابة الحزمة في composer.json
تحديث - قفل - تحديث ملف قفل composer.lock
config --global cache-files-maxsize "2048MiB" - مثال على تغيير معلمة التكوين
- ملف التعريف - إضافة هذه المعلمة إلى أي أمر سيمكن من عرض وقت التنفيذ ومقدار الذاكرة المستخدمة
- أفرط - معلومات مفصلة حول العملية التي يجري تنفيذها
تظهر - مثبتة - قائمة الحزم المثبتة مع وصف لكل منها
عرض - منصة - PHP المعلومات
- المدى الجاف - بروفة تنفيذ الأوامر. يمكن إضافته لتثبيت وتحديث الأوامر. يحاكي تنفيذ أمر ما دون تنفيذه مباشرة. من الضروري التحقق من نجاح تثبيت الحزم والتبعيات.
إزالة - إزالة الحزمة. العكس تماما من تتطلب
بناء الجملة composer.json
تسمية الحزمة وخيارات وصف الحزمة
يتكون اسم الحزمة من جزأين مفصولين بشرطة مائلة: اسم البائع واسم المكتبة.

إذا كانت الحزمة مصممة وفقًا لمعيار PSR-4 ، ولكن لم يتم نشرها على packagist.org ، ولكن على github ، فبدلاً من إصدار الحزمة ، تحتاج إلى تسجيل فرع ومستودع لهذه الحزمة:

مثال على توصيل مكتبة موجودة على github ، ولكنها غير مؤطرة وفقًا لمعيار PSR-4 ، ولكنها كومة عادية من الملفات مع فئات ووظائف.
عرض عينة:

Pqr / superlib - هذا هو نفس مكتبة "خاطئة".
في قسم المستودعات ، نكتب مثل هذا البناء لذلك

النقطة الأساسية هي قسم التحميل التلقائي ، وهنا نحدد الملفات التي نحتاجها مع الفئات والوظائف.
هيكل المكتبة:

محتويات الملف:


وفقًا لذلك ، في المشروع ، ستبدو الدعوة إلى getCurrentTime () كالتالي:
$ timer = new pqr \ superlib \ TimerClass؛
صدى $ timer-> getCurrentTime () ؛
الإصدار
عند تحديد إصدارات حزم صالحة ، يمكنك استخدام المراسلات الدقيقة (1.2.3) ، النطاقات مع عوامل المقارنة (<1.2.3) ، مجموعات من هذه العوامل (> 1.2.3 <1.3) ، "آخر متاح" (1.2. *) ، رمز Tilde (~ 1.2.3) وعلامة الإدراج (^ 1.2.3).
ستشمل إشارة التلدة (~ 1.2.3) جميع الإصدارات حتى 1.3 (غير شاملة) ، لأنه في الإصدار الدلالية ، هذه هي لحظة تقديم وظائف جديدة. في هذه الحالة ، سيتم الحصول على آخر الإصدارات الثانوية المستقرة. أي سيتم تغيير الرقم الأخير فقط - 1.2.5 ، 1.2.8 ، إلخ.
الإشارة إلى علامة الإدراج (^ 1.2.3) تعني حرفيًا "حذار من التغييرات الحرجة فقط" وستتضمن إصدارات حتى 2.0. فيما يتعلق بالإصدار الدلالي ، فإن التغيير في الإصدار الرئيسي هو لحظة إجراء تغييرات مهمة على المشروع ، وبالتالي فإن الإصدارات 1.3 و 1.4 و 1.9 مناسبة ، في حين أن الإصدار 2.0 لم يعد موجودًا.
أي فقط الرقم الأول لا يتغير.
تيلدا: ~ 1.2.3 هي الطريقة الأكثر شيوعا وآمنة لتحديد إصدار.
ملف الملحن
يحفظ ملف composer.lock القائمة الحالية للتبعيات المثبتة وإصداراتها. وبالتالي ، في الوقت الذي يتم فيه بالفعل تحديث إصدارات التبعية (أمر التحديث) ، سيحصل الأشخاص الآخرون الذين سيقومون باستنساخ مشروعك على نفس الإصدارات. يتيح لك ذلك التأكد من أن كل شخص يتلقى مشروعك لديه بيئة دفعية مماثلة لتلك التي استخدمتها أثناء التطوير ، ويساعد على تجنب الأخطاء التي قد تنشأ بسبب ترقيات الإصدار.
في كل مرة يتم تنفيذ أمر التحديث ، يتم تسجيل إصدارات الحزم المحدثة في composer.lock. يتم ضغط هذا الملف ضمن نظام التحكم في الإصدار ، وعند تثبيت الحزم على الخادم الجديد ، سيتم تسليم تلك الإصدارات من الحزم المسجلة في هذا الملف. عند تنفيذ أمر install ، سيعتمد الملحن بشكل أساسي على composer.lock. وبالتالي ، سيتم ضمان بيئة الحزمة نفسها من حيث الإصدارات ليتم تثبيتها على خوادم مختلفة.
أيضًا ، يحتوي ملف composer.lock على تجزئة لملف composer.json.
وإذا تم تحرير ملف json ، فسوف يحذرك الملحن بأن ملف القفل لا يتطابق مع ملف json.
في هذه الحالة ، تحتاج إلى تشغيل الأمر - locker update composer ، والذي سيؤدي إلى تحديث composer.lock.




الفرق بين التثبيت والتحديث في سياق استخدام composer.lock
يقوم أمر
تثبيت الملحن بما يلي:
يتحقق من وجود composer.lock:
- إذا لم يكن كذلك ، يحل التبعيات ويخلقها
- في حالة وجود composer.lock ، يقوم بتثبيت الإصدارات المحددة فيه
أمر
تحديث الملحن :
- الشيكات composer.json
- يحدد أحدث الإصدارات بناءً على تلك المحددة في هذا الملف
- تثبيت أحدث الإصدارات
- تحديثات composer.lock وفقا للتثبيت
مثال للاستخدام من وجهة نظر منشئ المشروع
هناك مشروع بدون حزم مثبتة

ضع بعض المكتبات


لقد شكلنا composer.json مع معلومات الحزمة

يمكننا استكماله وتوزيع المشروع بهذا الملف.

قام مستخدم آخر بتنزيل مشروعنا وتثبيت التثبيت ، وتم نشر جميع الحزم اللازمة في مشروعه.

مثال للاستخدام من منظور منشئ الحزمة
على سبيل المثال ، قمت بإنشاء فصل دراسي باستخدام طريقة تعرض عنوان URL للصفحة الحالية

تم تصميم الفصل كحزمة وتحميله على جيثب.


جمعتها composer.json

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

كل حزمة المضافة


أتحقق من وظائف الحزمة

تم تسليم الحزمة ، وهنا هو صفنا:

استدعاء الأسلوب

كل شيء على ما يرام.

الملحن و PhpStorm
التهيئة




تكوين قدرات تحرير حزمة الملحن

إذا تم ضبط الخيار ، فلن يكون من السهل أخذ الملفات وتحريرها داخل المورد / * / *
حزمة التثبيت





الفروق الدقيقة ، الدقيقة ، المواقف الصعبة
خطأ: تحذير: ملف القفل غير محدث بأحدث التغييرات في composer.json. قد تكون الحصول على التبعيات التي عفا عليها الزمن. تشغيل التحديث لتحديثها. لا شيء لتثبيت أو تحديث
الحل: تحديث الملحن - القفل
يستغرق التحديث وقتًا طويلاً مع تثبيت عدد كبير من المكتبات
يتحقق الملحن من جميع تبعيات الحزم ، وإذا كان هناك العديد من الحزم ، فسيكون هذا وقتًا طويلاً.
الحل: إذا كنت بحاجة إلى تحديث مكتبة واحدة فقط ، فحددها بوضوح:
حزمة تحديث الملحن / الاسميمكنك أيضًا إضافة المعلمة "- تفضيل dist" (على الرغم من أنه من الناحية النظرية ، يجب تشغيلها افتراضيًا) ، سيحاول الملحن تثبيت المكتبة من أرشيف zip ، بدلاً من استنساخ المخزون.
تعذر تنزيل ملف "****. Json": فشل في فتح البث: فشل طلب HTTP!
يحاول الملحن سحب الحزمة عبر HTTP ، على الرغم من أنه يحتاج إلى تجاوز HTTPS
الحل: الملحن التكوين - العالمية repo.packagist الملحن
packagist.orgالحزمة غير متوفرة في إصدار ثابت بما يكفي وفقًا لإعداد الحد الأدنى من الاستقرار
انظر لمزيد من التفاصيل.
لا تحتوي الحزمة على إصدار ثابت ، ولا يُسمح بتثبيت إصدار dev في التكوين.
الحل: إما تعيين المعلمة "الدنيا الاستقرار": "ديف" و "تفضيل الاستقرار": صحيح لوضع إصدارات مستقرة قدر الإمكان ، أو - إذا كانت هذه هي الحزمة الخاصة بك - إنشاء علامة مع الإصدار (يجب أن يكون الملصق المستقر في الملف التمهيدي على github عرض الإصدار)
تاريخ التنمية والتغيرات الرئيسية
- تم إطلاق الإصدار الأول في 1 مارس 2012 وتطورت أداة 2012 بالكامل بنشاط
- يناير 2014 - تم تحميل التحميل التلقائي بناءً على PSR-4
- مارس 2016 - تم إصدار النسخة التجريبية (1.0.0-beta1). إن العرض الإضافي - الأوامر الثلاثية لعرض الحزم المثبتة في شجرة ، والسبب في ذلك - يوضح سبب استحالة تثبيت الحزمة ، والتحديث - التفاعلي - يتيح لك اختيار الحزم المراد تحديثها ، وكذلك العديد من التحسينات والإصلاحات الأخرى.
- 4 أبريل ، 2016 - تم إطلاق أول إصدار مستقر من الملحن - 1.0.0
ديسمبر 2014 - أحد المفاتيح الرئيسية ملتزم بمستودع الملحن
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
جوهر التغيير - جامع القمامة تعطيل

habrastorage.org/getpro/habr/comment_images/db3/59a/972/db359a972df6730e52f292b5c52095b8.gifالمراجع
خارج الموقع: getcomposer.org
مستودع الرزم الرسمي: packagist.org
مستودع الملحن:
github.com/composer/composerالبرنامج التعليمي للملحن الرائع :
daylerees.com/composer-primerقائمة الأوامر ومثال تفصيلي لملف
composer.json :
composer.json.jolicode.com