الملحِّن أو composer (كومبوزر) هو مدير حزم/اعتماديات PHP، يمكن استخدامه لتثبيت وتتبع وتحديث اعتماديات مشروعك، ويهتم أيضًا بالتحميل التلقائي للاعتماديات التي يعتمد عليها تطبيقك مما يجعلك تستخدم الاعتمادية بسهولة داخل مشروعك دون القلق بشأن تضمينها في بداية كل ملف.
يعدّ المُلحِّن composer أشهر مدير اعتمادية، وهو يماثل npm في Node وpip في Python وNuGet في .NET.
توجد اعتماديات مشروعك ضمن ملف composer.json الموجود عادةً في جذر المشروع، ويحمل هذا الملف معلومات الإصدارات المطلوبة للحزم في مرحلتي تطوير المشروع وإنتاجه، يمكن تعديل هذا الملف بشكلٍ يدوي باستخدام أي محرر نصوص أو تلقائيًا باستخدام أوامر سطر الأوامر مثل composer require <package> أو composer require-dev <package>.
تحتاج لبدء استخدام المُحلِّن في مشروعك إلى إنشاء ملف composer.json، يمكنك إنشاؤه يدويًا أو بتنفيذ الأمر composer init وبعد تنفيذ هذا الأمر في الطرفية ستسألك عن بعض المعلومات الأساسية لمشروعك: اسم الحزمة (vendor/package مثل laravel/laravel) - الوصف وهو اختياري - الكاتب وبعض المعلومات الأخرى مثل حد الاستقرار الأدنى والرخصة والحزم المطلوبة.
يصف المفتاح require في ملف composer.json الحزم التي يعتمد عليها مشروعك، ويأخذ كائنًا يربط اسم الحزمة (مثل monolog/monolog) بقيود الإصدار (مثل 1.0.*).
{ "require": { "composer/composer": "1.2.*" } }
تحتاج لتثبيت الاعتماديات المعرّفة إلى تنفيذ الأمر composer install ثم يجد composer الحزم المعرّفة المطابقة لقيد version الموجود ويحمّلها في مجلد vendor، هذا اصطلاح لوضع شيفرة من طرف ثالث في مجلد اسمه vendor.
ستلاحظ أنّ الأمر install يُنشئ الملف composer.lock تلقائيًا، يستخدم هذا الملف لتتبع الإصدارات المنصَّبة حاليًا وحالة اعتمادياتك، وسيثبّت تنفيذ الأمر composer install الحزم إلى الحالة المخزّنة في ملف القفل.
| المعامل | تفاصيل |
| license | يعرّف نوع الرخصة التي تريد استخدامها في المشروع |
| authors | يعرّف كاتبي المشروع وتفاصيل عنهم |
| support | يعرّف البريد الإلكتروني للدعم وقناة الدردشة على الإنترنت والروابط المختلفة |
| require | يعرّف الاعتماديات الفعلية بالإضافة إلى إصدارات الحزمة |
| require-dev | يعرّف الحزم الضرورية لتطوير المشروع |
| suggest | يعرّف اقتراحات الحزمة، مثال الحزم التي تساعد في التثبيت |
| autoload | يعرّف سياسات التحميل التلقائي للمشروع |
| autoload-dev | يعرّف سياسات التحميل التلقائي لتطوير المشروع |
التحميل التلقائي مع المحلن
بينما يوفر المُلحِّن نظامًا لإدارة اعتماديات مشروعك من Packagist مثلًا، يمكن أن يعمل أيضًا كمحمّل تلقائي يصف أين يبحث عن فضاء أسماء محددة أو يضمّن ملفات الدوال العامة.
يبدأ مع ملف composer.json:
{ // ... "autoload": { "psr-4": { "MyVendorName\\MyProject": "src/" }, "files": [ "src/functions.php" ] }, "autoload-dev": { "psr-4": { "MyVendorName\\MyProject\\Tests": "tests/" } } }
تضمن شيفرة الإعداد هذه أنّ كل الأصناف في فضاء الاسم MyVendorName\MyProject رُبطت إلى مجلد src وكل الأصناف في MyVendorName\MyProject\Tests رُبطت إلى مجلد tests (نسبةً إلى المجلد الجذر) وسيضمّن تلقائيًا ملف functions.php.
بعد إضافة هذا الإعداد إلى ملف composer.json ننفذ الأمر composer update في الطرفية ليحدّث المُحلِّن الاعتماديّات وملف القفل ويولّد ملف autoload.php، ستستخدم عند النشر إلى بيئة الإنتاج الأمر install --no-dev، ويمكن إيجاد ملف autoload.php في مجلد vendor الذي يجب أن يتولّد في نفس المجلد الموجود به composer.json، ويجب تضمينه مبكرًا عند نقطة إعداد في دورة حياة تطبيقك باستخدام سطر مشابه للتالي:
require_once __DIR__ . '/vendor/autoload.php';
بعد التضمين سيهتم ملف autoload.php بتحميل كل الاعتماديّات المذكورة في ملف composer.json.
بعض أمثلة ربط مسار الصنف بالمجلد:
MyVendorName\MyProject\Shapes\Square ➔ src/Shapes/Square.php. MyVendorName\MyProject\Tests\Shapes\Square ➔ tests/Shapes/Square.php.
الفرق بين 'composer install' و'composer update'
composer update
يحدّث هذا الأمر الاعتماديات المحددة في ملف composer.json، فإذا كان المشروع يستخدم هذا الإعداد مثلًا:
"require": { "laravelcollective/html": "2.0.*" }
بفرض كان الإصدار 2.0.1 لهذه الحزمة مثبتًا، سيؤدي تنفيذ الأمر composer update إلى ترقية هذه الحزمة (إلى 2.0.2 مثلًا إذا كانت قد أُصدرت)، أي أنّ هذا الأمر سوف:
-
يقرأ ملف
composer.json -
يزيل الحزم المثبتة التي لم تعد مطلوبة في
composer.json - يتحقق من توافرية الإصدارات الأخيرة من الحزم المطلوبة
- يوفر الإصدارات الأخيرة من الحزم
-
يحدّث ملف
composer.lockلتخزين إصدار الحزم المثبتة
composer install
سيثبت الأمر composer install كل الاعتماديات المحددة في ملف composer.lock وفقًا للنسخة المحددة دون تحديث أي شيء، أي أنّ هذا الأمر:
-
يقرأ ملف
composer.lock -
ينصّب الحزم المحددة في ملف
composer.lock
متى تثبِّت ومتى نحدِّث؟ نستخدم composer update غالبًا في مرحلة التطوير لتحديث حزم المشروع ونستخدم composer install بشكلٍ أساسي في مرحلة النشر لتثبيت التطبيق على خادم الإنتاج أو على بيئة الاختبار باستخدام نفس الاعتماديات المخزنة في ملف composer.lock المُنشأ من قِبل composer update.
أوامر المحلن composer المتاحة
| الأمر | الاستخدام |
| about | معلومات قليلة حول المُحلِّن |
| archive | ينشئ أرشيفًا من حزم المُحلِّن |
| browse | يفتح رابط مستودع الحزمة أو الصفحة الرئيسية في المتصفح |
| clear-cache | يمسح ذاكرة التخزين المؤقت الداخلية للمُلحِّن |
| clear-cache | يمسح ذاكرة التخزين المؤقت الداخلية للمُلحِّن |
| config | يضبط خيارات الإعداد |
| create-project | ينشئ مشروعًا جديدًا من حزمة في المجلد المحدد |
| depends | يعرض الحزم التي تتسبب في تثبيت الحزمة الحالية |
| diagnose | يشخّص النظام لتحديد الأخطاء المعروفة |
| dump-autoload | يفرّغ المحمّل التلقائي |
| dumpautoload | يفرّغ المحمّل التلقائي |
| exec | ينفّذ سكربت/ثنائي مقدم |
| global | ($COMPOSER_HOME) يسمح بتنفيذ الأوامر في مجلد المُلحِّن العام |
| help | يعرض المساعدة لأمر ما |
| home | يفتح رابط مستودع الحزمة أو الصفحة الرئيسية في المتصفح |
| info | يعرض معلومات الحزم |
| init | أساسي في المجلد الحالي composer.json ينشئ ملف |
| install | composer.json إذا وجد أو يعود إلى composer.lock ينصّب اعتماديات المشروع من |
| licenses | يعرض معلومات رِخص الاعتماديات |
| list | يعرض الأوامر في قائمة |
| outdated | يعرض قائمة بالحزم المنصّبة والتي تتوفر تحديثات لها مع إصدارها الأخيرة |
| prohibits | يعرض الحزم التي تمنع تثبيت الحزمة الحالية |
| remove | require-dev أو requireيزيل حزمة من |
| require | وينصّبها composer.json يضيف الحزم المطلوبة إلى |
| run-script | composer.json ينفّذ السكربتات المعرفة في |
| search | يبحث عن الحزم |
| self-update | إلى الإصدار الأخير composer.phar يحدّث |
| selfupdate | إلى الإصدار الأخير composer.phar يحدّث |
| show | يعرض معلومات حول الحزم |
| status | يعرض قائمة بالحزم المعدّلة محليًا |
| suggests | يعرض اقتراحات الحزم |
| update | composer.lock ويحدّث composer.jsonيحدّث الاعتماديات إلى آخر إصدار وفقًا لملف |
| validate | composer.lockو composer.json يتحقق من صحة |
| why | يعرض الحزم التي تتسبب في تثبيت الحزمة الحالية |
| why-not | يعرض الحزم التي تمنع تثبيت الحزمة الحالية |
فوائد استخدام الملحن composer
يتتبع المُحلِّن إصدارات الحزم المنصّبة في ملف يسمّى composer.lock والذي يهدف إلى التحكم في الإصدار، لذا عندما يُنسخ مشروعك مستقبلًا فإنّ تنفيذ الأمر composer install سينصّب ويحمّل كل اعتماديات المشاركة.
يتعامل المُلحِّن composer مع اعتماديات PHP على أساس المشروع، مما يجعل من السهل وجود عدة مشاريع على جهاز واحد يعتمد على إصدارات منفصلة لحزمة PHP واحدة.
يتتبع المُحلِّن الاعتماديات المخصصة لبيئات التطوير فقط.
composer require --dev phpunit/phpunit
يوفر المُحلِّن محمّلًا تلقائيًا مما يجعل من السهل أن تبدأ بالعمل مع أي حزمة، مثلًا بعد تثبيت Goutte باستخدام الأمر composer require fabpot/goutte, يمكنك البدء مباشرةً باستخدام Goutte في مشروع جديد:
<?php require __DIR__ . '/vendor/autoload.php'; $client = new Goutte\Client(); // Goutte البدء باستخدام
يسمح لك المُحلِّن بتحديث مشروعك بسهولة إلى الإصدار الأخير الذي يسمح به composer.json مثل composer update fabpot/goutte أو بتحديث كل من اعتماديات مشروعك: composer update.
التثبيت
قد تثبّت المُحلِّن محليًا كجزء من مشروعك أو عامًا كنظام عريض قابل للتنفيذ.
محليًا
عن طريق تنفيذ هذه الأوامر في الطرفية:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
للتأكد من صلاحية المنصِّب المحمّل افحصه عبر هذا الرابط ضد SHA-384.
ستؤدي الشيفرة السابقة إلى تحميل composer.phar (ملف أرشيف PHP) إلى المجلد الحالي، ويمكنك الآن تنفيذ الأمر php composer.phar لاستخدام المُلحِّن، مثال:
php composer.phar install
عامًّا
ضع ملف composer.phar في مجلد يكون جزء من مسارك لاستخدام المُلحِّن بشكلٍ عام.
mv composer.phar /usr/local/bin/composer
يمكنك الآن استخدام المُلحِّن في أي مكان بدلًا من php composer.phar مثال:
composer install
ترجمة -وبتصرف- للفصل [Composer Dependency Manager] من كتاب PHP Notes for Professionals book
اقرأ أيضًا
- المقال التالي: التوابع السحرية (Magic Methods) في PHP
- المقال السابق: مفهوم السمات (Traits) في PHP

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