ملاحظات للعاملين بلغة php مدخل إلى الملحن composer: مدير الاعتماديات والحزم في PHP


سارة محمد2

الملحِّن أو 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



1 شخص أعجب بهذا


تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن