مقدّمة
يعدّ Composer أحد أكثر الأدوات شيوعا بين مطّوري PHP، فهو مستخدم لإدارة الاعتمادات Dependency management إذ يُسهّل كثيرا من تثبيت وتحديث المكتبات البرمجيّة التي يحتاجها المشروع قيد التطوير. يتحقّق Composer من المكتبات التي يعتمد عليها المشروع ويثبّت الإصدار المناسب منها لمتطلّبات المشروع.
يشرح هذا المقال كيفية تثبيت Composer واستخدامه على توزيعة أوبونتو 16.04. سنفترض في هذا المقال أن لديك خادوما يعمل بالإصدار المذكور، إضافة إلى مستخدم أعلى Super user.
تثبيت الاعتمادات
ينبغي أن نتأكّد أولا، قبل تنزيل Composer، أن حزم البرامج التي يحتاجها موجودة على نظام التشغيل لدينا.
نبدأ بتحديث فهرس الحزم:
sudo apt-get update
ثم نثبّت الحزم المطلوبة:
sudo apt install curl php-cli php-mbstring git unzip
نحتاج curl
لتنزيل Composer وphp-cli
لتثبيته وتشغيله. ستكون الحزمة php-mbstring
مطلوبة لاستخدام دوال تحتاجها مكتبة سنستخدمها لاحقا. بالنسبة لـ git
فيحتاجه Composer لتنزيل اعتمادات المشاريع؛ أما unzip
فيُستخدَم لاستخراج ملفات Zip.
تنزيل Composer وتثبيته
يوفّر Composer برنامج تثبيت مكتوبا بـ PHP. تأكّد من أنك موجود في المجلّد الشخصي للمستخدم ثم احصُل على ملف التثبيت بالأمر curl
على النحو التالي:
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
ينزّل الأمر السابق ملف التثبيت ويحفظه في المجلد الشخصي باسم composer-setup.php
. سنتأكّد من أن الملف الذي نزّلناه يوافق التجزئة Hash الخاصة بالملف على موقع Composer للتأكد من سلامته.
افتح الصفحة التاليّة وانسخ سلسلة المحارف تحت العنوان Installer Signature (SHA-384) المكوّنة من 96 محرفا مكان SHA-384
في السكربت أدناه، بين الظفرين:
php -r "if (hash_file('SHA384', 'composer-setup.php') === '**SHA-384**') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
ينبغي أن يطبع السكربت الجملة التالية:
Installer verified
نثبّت Composer على النحو التالي ليكون متاحا على أي مجلّد في النظام”
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
ينزّل اﻷمر أعلاه Composer ويجعل الأمر composer
متاحا على كامل النظام:
All settings correct for using Composer
Downloading 1.4.1...
Composer successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
للتحقّق من التثبيت نفّذ الأمر composer
بدون تمرير معطيات. تظهر النتيجة التالية:
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.4.1 2017-03-10 09:29:45
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
(...)
يعني هذا أن Composer ثُبِّت بنجاح على نظامك.
يمكنك كذلك أن تبقي على ملفات Composer تنفيذية خاصّة بكل مشروع بدلا من أن يكون الأمر composer
متاحا على كامل النظام. تفيد هذه الطريقة أيضا مفيدة إذا كان المستخدم لا يملك صلاحيات تثبيت الأداة على كامل النظام. في هذه الحالة يكون التثبيت بتنفيذ الأمر التالي بعد تنزيل ملف التثبيت والتحقق منه:
php composer-setup.php
سيولّد الأمر أعلاه ملف composer.phar
في المجلد الذي نُفِّذ فيه الأمر. لتشغيل Composer بعد التثبيت بهذه الطريقة نفّذ الأمر من داخل مجلّد التثبيت:
./composer.phar
توليد ملف composer.json
ثبّتنا Composer ونحن الآن جاهزون لاستخدامه. أولّ ما يجب علينا فعله لاستغلال إمكانيّات Composer هو إنشاء ملف composer.json
. دور ملف composer.json
هو إخبار Composer بالمكتبات البرمجيّة التي يحتاجها المشروع الذي نعمل عليه (الاعتمادات)، مع تحديد الإصدارات المطلوبة. من المهمّ جدا تحديد الإصدارات بحيث تتناسق مع مشروعك وتتجنّب تثبيت إصدارات غير مستقرّة قد تؤثّر سلبا على ما تعمل عليه.
ليس ضروريّا إنشاءُ ملف composer.json
يدويّا، بل إن ذلك يجعل احتمال الأخطاء المطبعيّة في الصياغة أكبر. يولّد Composer ملف composer.json
تلقائيا عند إضافة متطلّبات جديدة إلى المشروع بالأمر composer require
.
يمرّ استخدامُ Composer لتثبيت اعتماد جديد عادة على الخطوات التاليّة:
- تحديد نوع المكتبة البرمجيّة التي يحتاجها مشروعك.
- البحث عن مكتبة مناسبة على الموقع Packagist.org، وهو المستودع الرسمي لحزم Composer.
- اختيار المكتبة البرمجية التي تريد استخدامها في مشروعك.
-
استعمال الأمر
composer require
لإضافة المكتبة إلى الملفcomposer.json
. - تثبيت الحزمة.
سنعرض في ما يلي تطبيقا تجريبيا نطبّق من خلاله هذه الخطوات. سيكون الهدف من التطبيق تحويل جملة معيّنة إلى سلسلة محارف تصلح لتكون جزءا من رابط URL، ضمن ما يُعرَف بـ Slug. تُستخدَم هذه الطريقة كثيرا لجعل عنوان صفحة رابطا لها +(تنطبق هذه الملاحظة على المقال الذي تقرأه الآن).
نبدأ بإنشاء مجلّد للمشروع نسمّيه slugify
ضمن المجلّد الشخصي للمستخدم:
cd ~
mkdir slugify
cd slugify
البحث عن حزم مكتبات على Packagist
حان الآن موعد البحث عن مكتبة على Packagist.org لاستخدامها في توليد Slug في مشروعنا. إن بحثت على الموقع عن الكلمة المفتاحية slug فستجد نتائج تشبه التالي.
يظهر عددان في الجانب الأيمن لكلّ حزمة في قائمة نتائج البحث. يدلّ العدد الأعلى على مرات تثبيت الحزمة، أما العدد الأسفل فيعني عدد المرات التي حصلت فيها الحزمة على نجمة على Github. يمكنك إعادة ترتيب الحزم حسب هذين العدديْن. عموما، كل ما كانت التثبيتات والنجوم أكثر كلّ ما دلّ ذلك على ثبات الحزمة؛ إلا أن من المهمّ قراءة وصف الحزمة حتى تتأكد من موافقتها لما تريد.
نحتاج لمكتبة بسيطة تحوّل الجمل إلى سلسلة محارف لاستخدامها في الروابط. يبدو من أوصاف الحزم في نتائج البحث أن الحزمة cocur/slugify
(لا تظهر في لقطة الشاشة أعلاه) مناسبة لنا، كما أن عدد مرات تثبيتها ونجومها مقبول، لذا سنختارها.
ربما لاحظت أن أسماء الحزم على Packagist تتضمّن خانتين مفصولتين بشريط مائل. تحيل الخانة الأولى إلى الشركة أو الشخص المطوِّر للحزمة Vendor (وهو cocur
في الحزمة التي اخترناها)، أما الخانة الثانيّة فهي اسم الحزمة (slugify
). تشكّل الخانتان فضاء أسماء خاصًّا بالحزمة، وهو ما سنمرّره للأمر composer require
عند طلب إضافة الحزمة إلى اعتمادات مشروعنا.
جعل حزمة من متطلبات المشروع
نعرف الآن ماهي الحزمة البرمجيّة التي نريد الاعتماد عليها في مشروعنا. الخطوة المواليّة هي إخبار Composer أن هذه الحزمة مطلوبة لمشروعنا؛ لذا سننفّذ الأمر composer require
ونمرّر له فضاء الأسماء الخاصّ بالحزمة:
composer require cocur/slugify
تظهر مُخرجات الأمر التالية:
Using version ^2.5 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing cocur/slugify (v2.5): Downloading (100%)
Writing lock file
Generating autoload files
يقرّر Composer تلقائيا، كما يظهر في المخرجات أعلاه، أي إصدار من الحزمة البرمجية سيُثبِّت.
إن تحقّقت الآن من مجلّد المشروع فستجد ملفّيْن جديديْن هما composer.json
وcomposer.lock
ومجلدًّا فرعيّا جديدا باسم vendor
:
ls -l
النتيجة:
total 28
-rw-rw-r-- 1 zeine77 zeine77 59 Apr 10 15:15 composer.json
-rw-rw-r-- 1 zeine77 zeine77 2901 Apr 10 15:15 composer.lock
drwxrwxr-x 4 zeine77 zeine77 4096 Apr 10 15:15 vendor
يُستخدَم الملفّ composer.lock
لحفظ معلومات عن إصدارات المكتبات البرمجيّة المثبّتة، والتأكّد من استخدام نفس الإصدارات عندما ينسخ مطوّر آخر مشروعك للعمل عليه.
تُخزَّن في المجلّد vendor
ملفّات المكتبات البرمجيّة. يجب ألّا يودَع Commit المجلّد vendor
في نظام إدارة النسخ، بل يُكتفى بإيداع الملفيْن composer.lock
وcomposer.json
. عند تثبيت مشروع يحتوي على ملفّ composer.json
ستحتاج إلى تنفيذ الأمر composer install
من أجل تنزيل اعتمادات المشروع.
فهم القيود على إصدارات الاعتمادات
فلنطبع محتوى الملف composer.json
:
cat composer.json
تظهر النتيجة التاليّة (قد يختلف الإصدار قليلا لديك):
{
"require": {
"cocur/slugify": "^2.5"
}
}
ربّما لاحظت المحرف الخاصّ ^
أمام رقم الإصدار في الملفّ composer.json
. يدعم Composer صيغًا وشروطا مختلفة لتحديد الإصدارات المطلوبة من الحزم والمكتبات البرمجيّة، من أجل الحفاظ على ثبات المشروع مع السماح بمرونة أكبر حسب الحاجة. يُنصَح بالعامل ^
، المستخدَم عند توليد الملف composer.json
تلقائيًّا، للحصول على أعلى قدر من الاستقرار. يعني استخدام ^
أن الإصدار 2.5
هو الإصدار الأدنى المتوافق مع المشروع، مع السماح بتحديث الحزمة في المستقل إلى أي إصدار يقلّ عن3.0
.
لن تحتاج في أغلب الحالات للتدخلّ وتحرير الملف composer.json
لتعديل متطلّبات الإصدار يدويّا؛ إلا أنه توجد حالات يكون فيها هذا الأمر ضروريّا، كأن يُعلَن عن إصدار مهمّ من الحزمة يوفّر ميزات ترغب في الاستفادة منها أو عندما لا تتبع الحزمة التي تستخدمها ترقيما ذا دلالة متعارف عليه).
يوضّح الجدول التالي أمثلة على تعريف القيود على الإصدارات في الملف composer.json
. يظهر في العمود الأول القيدُ، وفي الثاني دلالة القيد وفي العمود الثالث أمثلة على إصدارات يسمح بها هذا القيد.
Constraint Meaning Example Versions Allowed ^1.0 >= 1.0 < 2.0 1.0, 1.2.3, 1.9.9 ^1.1.0 >= 1.1.0 < 2.0 1.1.0, 1.5.6, 1.9.9 ~1.0 >= 1.0 < 2.0.0 1.0, 1.4.1, 1.9.9 ~1.0.0 >= 1.0.0 < 1.1 1.0.0, 1.0.4, 1.0.9 1.2.1 1.2.1 1.2.1 1.* >= 1.0 < 2.0 1.0.0, 1.4.5, 1.9.9 1.2.* >= 1.2 < 1.3 1.2.0, 1.2.3, 1.2.9
يحوي التوثيق الرسمي على شرح مفصّل حول طريقة طتابة القيود في الملف composer.json
.
تضمين سكربتات تُحمَّل تلقائيا
يتيح Composer إمكانيّة التحميل التلقائي لسكربتات PHP، فيتولّى تحميل الأصناف Classes التي ترغب بتوفرها تلقائيا في تطبيقك. يجعل هذا الأمر من التعامل مع الاعتمادات وإنشاء فضاءات أسماء خاصّة بك أسهل كثيرا.
كلّ ما تحتاجه لتحميل حزمة تلقائيا هو تضمين الملف vendor/autoload.php
في سكربت PHP قبل استهلال Instantiation الصنف (لحظة إنشاء الكائن).
نعود للتطبيق المثال slugify
. سنستخدم محرر النصوص nano
لإنشاء ملفّ باسم test.php
داخل مجلّد المشروع الذي أنشأناه سابقا، من أجل استخدام cocur/slugify
:
nano test.php
نضع المحتوى التالي في الملف test.php
:
<?php
require __DIR__ . '/vendor/autoload.php';
use Cocur\Slugify\Slugify;
$slugify = new Slugify();
echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');
يمكنك تشغيل السكربت من الطرفية على النحو التالي:
php test.php
تظهر نتيجة التنفيذ التالية:
hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
تحديث اعتمادات المشروع
يُستخدَم الأمر التالي لتحديث اعتمادات المشروع:
composer update
سيتحقّق الأمر من وجود إصدارات جديدة من المكتبات البرمجيّة المطلوبة لمشروعك، فإن وجد إصدارا جديدا يتوافق مع القيود المعرَّفة ضمن الملف composer.json
فسيضعه مكان الإصدارات المثبتة. سيُحدَّث الملف composer.lock
ليوافق التغييرات الجديدة.
يمكنك كذلك تحديد مكتبات لتحديثها، دون أن تحدّث كامل المشروع، وذلك بتمريرها إلى الأمر composer update
:
composer update vendor1/package1 vendor2/package2
خاتمة
أصبح استخدام Composer شائعا بين المطوّرين لدرجة أنه صار عمليًّا معيارا لتشارك المكتبات البرمجيّة واسكتشافها ممّا يعني أنه أداة ضروريّة لتكون من مجموعة الأدوات التي تعتمد عليها.
ترجمة - بتصرّف - للمقال How To Install and Use Composer on Ubuntu 16.04 لصاحبه Brennen Bearnes.
أفضل التعليقات
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.