تطوير مكتبات تدعم Composer
المكتبات البرمجية
سوف نشرح بمقال اليوم عن كيفية تطوير مكتبة برمجية قابلة للتثبيت عن طريق Composer
قبل نبدأ المقال أنصحك بقراءة
بمجرد ان قمت بإنشاء ملف composer.json داخل مجلد اي مشروع برمجي لديك فإن المشروع
أصبح عبارة عن مكتبة برمجية تدعم Composer
وبمجرد أن أضفت require لملف composer.json فأنت قمت بإنشاء مكتبة تعتمد بعملها على
مكتبات أخرى. الفرق الوحيد الذي بين مشروعك والمكتبات الأخرى هو أن مشروعك عبارة عن مكتبة
ولكن بدون إسم
لجعل المكتبة قابلة للتثبيت من قبل Composer يجب ان تقوم بتسميتها ويتم تسمية المكتبة عن طريق
إضافة name لملف composer.json
في المقال طريقة استخدام Composer قمنا بعمل مشروع يعتمد على Composer وقمنا بتثبيت
كل من Monolog و Carbon الأن قم بتحرير ملف composer.json وأضف المفتاح name
ليتم تسمية المكتبة ليصبح محتوى الملف التالي
{
"name": "3alampro/hello-world",
"require": {
"monolog/monolog": "1.14.*",
"nesbot/carbon": "^1.20"
},
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
قمنا بتسمية المكتبة 3alampro/hello-world بحيث أن اسم المطور هو 3alampro و اسم المكتبة
hello-world يجب ان تزود المكتبة بإسم المطور وإسم المكتبة لتتم التسمية بدون مشاكل وبشكل صحيح
متطلبات المكتبة
يسمح لك Composer ان تحدد متطلبات تثبيت المكتبة مثل رقم إصدار php المثبت على جهاز المطور
او التحقق من وجود مكتبات تستخدم من قبل php مثل curl او openssl او iconv وغيرها من المكتبات
او حتى التحقق من إحدى ملحقات php هذه المتطلبات عند تحديدها يجب ان يقوم من يرغب بتثبيت مكتبتك
ان يوفرها بجهازه لان Composer لن يقوم بتركيبها له
التحقق يندرج تحت المفتاح require مثل ماقمنا بتحديد المكتبات التي نرغب بتثبيتها نستطيع تحديد متطلبات
المشروع ليعمل بدون مشاكل
نقدر نتحقق بواسطة هذه الكلمات
-
php للتحقق من نسخة php المثبته ونطلب نسخة معينة لعمل المكتبة مثل "5.4.0=<"
أو نحدد نسخة 64bit من php باستخدام php-64bit -
hhvm للتحقق من نسخة HHVM وتحديد رقم الإصدار المطلوب لعمل المكتبة مثل
"2.3.3=<" - <ext-<name للتحقق من وجود إضافة php مثبته ومفعلة مثل ext-gd
-
<lib-<name للتحقق من وجود مكتبة مستخدمة من قبل php مثل
curl, iconv, icu, libxml, openssl, pcre, uuid, xsl
فلو أردنا ان نقوم بتحديد إصدار php المطلوب لعمل المكتبة التي قمنا بعملها كل المطلوب هو تعديل
ملف composer.json وإضافة php تحت المفتاح require ليصبح محتوى الملف كالتالي
{
"name": "3alampro/hello-world",
"require": {
"php": ">=5.3.0",
"monolog/monolog": "1.14.*",
"nesbot/carbon": "^1.20"
},
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
إذا رغب اي مطور بتثبيت المكتبة بنجاح يجب عليه ان يقوم بتثبيت php النسخه 5.3.0 كحد أدنى
أو أي نسخة أحدث لتعمل المكتبة بدون مشاكل
تحديد الإصدار
عند نشر المكتبة على موقع Packagist الموقع قادر على استخراج رقم الإصدار من معلومات
VCS (نظام إدارة النسخ) مثل git و svn و hg هذا يعني انك لست بحاجة لإدراج رقم الإصدار
بملف composer.json ولكن سيتم استخراج رقم الإصدار بناء على معلومات الوسوم Tags
و الفروع Branches الخاص بنظام إدارة النسخ والمشاريع الذي تستخدم من اشهر المواقع
التي تقدم هذه الأدوات موقع GitHub
ولكن إذا كنت ترغب بإدراج رقم النسخة بملف composer.json تستطيع باستخدام المفتاح
version شاهد المثال هنا
{
"name": "3alampro/hello-world",
"version": "1.0.0",
"require": {
"php": ">=5.3.0",
"monolog/monolog": "1.14.*",
"nesbot/carbon": "^1.20"
},
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
ملاحظة: عند استخدام أحد برامج VCS لاتقم بإدراج رقم الإصدار لأنه سيتسبب بالوقوع في
مشاكل مع نظام ترقيم الإصدارات الوسوم Tags بحيث يجب ان يكون مسمى الوسم هو نفس
القيمة المخزنة لرقم الإصدار
الوسوم Tags
عند تعاملك مع أنظمة إدارة النسخ والمشاريع ستتعرف على الوسوم Tags وطريقة إستخدامها
لتحديد أرقام النسخ وأن كل إصدار يحمل وسم مميز لتحديد رقم الإصدار
لكل وسم يشبه رقم إصدار صحيح سيتم إنشاء مكتبة تحمل نفس الوسم ويجب ان يشبه "X.Y.Z"
أو "vX.Y.Z" مع إضافة بنهاية الوسم إختيارية مثل
- -patch او -p
- -alpha او -a
- -beta او -b
- -RC
وهنا امثلة لمسميات Tags صحيحة
- 1.0.0
- v1.0.0
- 1.10.0
- 1.10.5-RC1
- v4.4.4-beta2
- v2.0.0-alpha
- v2.0.4-p1
ملاحظة: حتى وإن كان الوسم يبدأ بحرف v و كنت ترغب بتحديد رقم الإصدار داخل ملف
composer.json بشكل يدوي يجب ان تدخل القيمة بدون اي حرف يسبق رقم الإصدار أبدا
الفروع Branches
هذه إحدى مميزات أنظمة إدارة النسخ والمشاريع إمكانية تقسيم المشروع إلى عدة فروع فبعض
المطورين يحب تقسيم مشروعه إلى فرع جاهز للإستخدام وفرع خاص بالتطوير وفرع خاص
بالإختبار ولك حرية تقسيم مشروعك كما تريد والبعض الآخر يحب تقسيم مشرعة بالآرقام مثلا
- 1.x
- 1.0 (equals 1.0.x)
- 1.1.x
- 2.x
- 3.x
بالنسبة عند إعداد مكتبة تدعم Composer وتقوم بنشرها على Packagist فإنه سيتم إنشاء
مكتبة بنسخة تطويرية لكل فرع في مشروعك إذا كان اسم الفرع يشبه رقم إصدار فمثلا فرع باسم
2.0 سيتم انشاء نسخة تطويريه لمكتبتك تنتهي بكلمة dev
2.0.x-dev
ملاحظة: في هذا المثال سيتم اضافة x لتلافي اي مشاكل فنية ليتم التعرف عليه كفرع بشكل سليم
ولكن اذا كان اسم الفرع لايتكون من ارقام وانما حروف مثل لو كان لديك فرع باسم master
سيتم انشاء مكتبة تطويرية بإسم dev-master فكلمة dev هنا تسبق الكلمة عكس لو كانت التسمية
عبارة عن أرقام
ملف القفل Lock File
كما ذكرنا سابقا فائدة هذا الملف هي تحديد بيئة عمل موحدة لتعمل انت وفريقك وانت متأكد أنهم
سوف يقومون بتثبيت نفس المكتبات والنسخ التي انت تعمل عليها بمشروعك ولكن عندما تقوم
بإنشاء المكتبة وتنشرها على موقع Packagist ويقوم مطور آخر بتثبيتها باحد مشاريعه كمتطلب
لمكتبة هو يقوم بتطويرها سيتم تجاهل هذا الملف حتى لايتعارض مع مشروع المطور فتأثير هذا
الملف فقط على المشروع الرئيسي
فإذا لم ترغب بنشر هذا الملف ضمن ملفات المكتبة وانت تستخدم git تستطيع إضافته لقائمة الملفات
التي يتم تجاهل إرسالها داخل الملف
.gitignore
النشر على VCS نظام إدارة النسخ و المشاريع
عندما تقوم بعمل Repository على نظام VCS ويحتوي على composer.json
فإن مكتبتك أصبحت قابلة للتثبيت من قبل Composer في بداية المقال وإستكمالا للمقال
السابق قمنا بإنشاء مكتبة وقمنا بتثبيت مكتبات برمجية داخلها وقمنا بتسمية المكتبة
3alampro/hello-world
سنقوم برفع المكتبة على GitHub بواسطة برنامج GitHube Client تسطيع تحميل
وتثبيت البرنامج بكل سهولة مستخدمي الماك Mac ومستخدمي الويندوز Windows
ومستخدمي لينوكس عن طريق هذه الصفحة linux توجد تعليمات التركيب
بعدها قم بتسجيل حساب جديد إذا لم يكن لديك حساب ثم قم بتسجيل الدخول إلى الموقع وبرنامج GitHub
الذي قمت بتثبيته بعدها
ملاحظة: عند نشر المكتبة إلى GitHub فأنت لست بحاجة الى نشر المجلد vendor داخل مجلد المشروع
فهذه وظيفة Composer ليقوم بتثبيت وتحميل المكتبات التي يحتاجها مشروعك او اي مشروع
يعتمد على المكتبة التي طورت ليوفر عليك الجهد والمساحة
عملية النشر جدا سهلة على GitHub باستخدام الواجهة الرسومية وراح نبسط العملية بعدة خطوات
قم بفتح البرنامج ثم أذهب إلى File ثم إلى Add Local Repository كما بالصورة
قم بتحديد مجلد المشروع الذي قمنا بإنشائه بالمقال بعد التسمية
بعدها ستظهر لك نافذة كالتالي
قم بالضغط Create and Add بعدها سيظهر لك التالي
خطوة مهمة الآن كما تلاحظ ان Github يخبرك بوجود ملفات جديدة تم إضافتها لمكتبتك
وتحتاج إلى نشرها ولاحظ العدد هنا 370 ملف جاهزة للنشر الى موقع GitHub ولكن
يمكن تقليص هذه الملفات الى المهمة التي قمنا نحن بتطويرها بانفسنا بتجاهل المجلد
vendor بحيث ان Composer سيتكفل بعملية تركيب المكتبات لنا عند طلبها
الآن أذهب إلى Repository ثم Repository Settings
بعدها ستظهر لك نافذة إعدادات المشروع قم بالظغط على Ignored Files
ومن هنا تستطيع إضافة الملفات و المجلدات التي لاترغب بنشرها عند رفع
المشروع الى GitHub الآن قم بإضافة مايظهر في الصورة لتجاهل مجلد
vendor وملف composer.lock
بعد الإضافة إضغط على زر Save لحفظ التغييرات سيظهر لك التالي
لاحظ أنه من 370 ملف تم تقليص عدد الملفات الى 6 ملفات فقط الأن كما في الصورة قم
بالتعبئة كالتالي
- العنوان: مختصر لوصف التغيرات التي حصلت عند نشرها
- الوصف: وصف مفصل للتغيرات التي حصلت حتى يفهم بقية المطورين ماذا حصل
- زر الإعتماد: بالضغط عليه انت تقوم باعتماد التغيرات لتصبح بعدها جاهزة للنشر
بعد الضغط على زر Commit ستصبح التغيرات والملفات جاهزة للنشر على موقع GitHub
بعدها أذهب إلى زر Publish لنشر المشروع إلى GitHub كما هو موظح بالصورة
بعدها ستظهر لك نافذة إعداد بيانات المشروع على موقع GitHub
الآن قم بتعبئة البيانات المطلوبة لنشر المشروع كالتالي
- اسم المكتبة على موقع GitHub
- وصف لعمل المكتبة
-
إذا كنت ترغب ان يكون المشروع خاص ولايسمح لاي احد الدخول عليه إلا بتصريح منك
قم بإختيار هذا الخيار مع العلم انه ليس مجاني يتم تفعيله برسوم شهرية او سنوية
لن اقوم باختياره حتى يستطيع الكل مشاهدة المكتبة بدون صلاحيات - زر النشر على موقع GitHub
بعد الضغط على زر Push Repository سيتم نشر المكتبة بنجاح لموقع GitHub وسيتم إنشاء المكتبة
على العنوان github.com/user-name/package-name وبالنسبة للمكتبة في هذا المقال يمكن
زيارتها عن طريق هذا الرابط https://github.com/3alampro/hello-world
الآن لنعمل تجربة ونثبت نفس المكتبة عن طريق Composer
قم بعمل مجلد جديد داخل مجلد السيرفر المحلي وقم بتسميته blog مثلا
وداخل هذا المجلد قم بإنشاء ملف composer.json وبداخله ضع هذا الكود
{
"require": {
"3alampro/hello-world": "dev-master"
}
}
قبل البدء بالتثبيت يجب ان نخبر Composer ماهو نوع المكتبة وعنوانها
باستخدام المفتاح repositories والسبب اننا لم نقم برفع المكتبة على
موقع Packagist الآن قم بالتعديل على ملف composer.json ليصبح
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/3alampro/hello-world"
}
],
"require": {
"3alampro/hello-world": "dev-master"
}
}
بعد حفظ الملف قم بتنفيذ الأمر install على هذا المشروع ليقوم Composer
بتثبيت المكتبة لديك وجميع المكتبات التي تعتمد عليها داخل المجلد vendor
النشر على Packagist
أصبحت الآن قادر على عمل مكتبة برمجية تدعم التثبيت من قبل Composer
ولكن إستخدام المفتاح repositories كل مره لتثبيت المكتبة يصبح أمر متعب
للمبرمجين ولتبسيط عملية التثبيت لجميع المبرمجين
بعد نشرك المكتبة بنجاح لأحد مواقع VCS مثل مافعلنا مع GitHub كل المطلوب
منك ان تقوم بنشر المكتبة على موقع Packagist فهو المصدر الأساسي لكل مكتبات
Composer فكل المكتبات التي يتم نشرها على هذا الموقع تصبح متاحه للتثبيت من قبل
Composer بكل سهولة كما في المقال السابق قمنا بتثبيت Monolog و Carbon
وإذا كنت ترغب بمشاركة مكتبتك البرمجية مع جميع المطورين يجب ان تقوم بنشر المكتبة
أيضا على مو Packagist والطريقة جدا سهلة
كل المطلوب منك زيارة موقع Packagist ثم الضغط على زر Submit سوف يقوم بتوجيهك
لصفحة تسجيل الدخول إذا لم يسبق لك التسجيل وتستطيع تسجيل الدخول عن طريق موقع GitHub
إضغط على Login with GitHub إذا لم يكن لديك حساب من قبل بعد ان تقوم بعملية التسجيل
سيوجهك لصفحة لتدخل اسم المستخدم وبريدك الإلكتروني وبعد تعبئة البيانات
إضغط على Register account لإتمام عملية التسجيل بنجاح
بعدها نظغط على زر Submit وهنا كل المطلوب منا هو رابط المكتبة على نظام VCS
بالمقال قمنا بنشر المكتبة على موقع GitHube وكان رابط المكتبة التالي
https://github.com/3alampro/hello-world
قم بإدخال الرابط الصحيح لمكتبتك على GitHub وأضغط الزر Check
إذا كان توجد مكتبات لها نفس الإسم سيعطيك تحذير بانه تم العثور على مكتبات بنفس الإسم
ولكن لاتقلق لانه سبق و قمنا بإدخال اسم المطور الخاص بنا لإسم المكتبة
فلن يوجد تعارض إضغط Submit
بعدها سوف يعطيك رابط المكتبة اذا تم إرسالها بنجاح وفي المثال هنا هذا هو رابط المكتبة
https://packagist.org/packages/3alampro/hello-world
الآن لتركيب المكتبة نقوم بعمل مشروع جديد بالسيرفر المحلي سمي المجلد كما تحب
وداخل المجلد قم بإنشاء ملف composer.json وداخل هذا المجلد اطلب المكتبة
بالمفتاح require كالتالي
{
"require": {
"3alampro/hello-world": "dev-master"
}
}
ملاحظة: لم نستخدم المفتاح repositories لتحديد نوع المكتبة ومصدرها
فإن Composer سيبحث عن المكتبة ضمن الموقع Packagist
ويقوم بعملية التثبيت بكل سهولة وبساطة
الآن قم بتنفيذ الأمر composer install لتثبيت المكتبة
بنهاية المقال قمت بتطوير مكتبة برمجية قابلة للتثبيت عن طريق Composer
بكل سهولة ولها اسم ولها متطلبات من مكتبات أخرى ليقوم اي مطور بتثبيتها
بأمر واحد بدون مشاكل
أتمنى ان يكون المقال ذو فائدة لكم ولمشاريعكم البرمجية
التعليقات (2)
عرض المزيد.. جديد مقالاتي
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !