تطوير مكتبات تدعم Composer

Ali Majrashiمنذ 6 سنوات

المكتبات البرمجية

سوف نشرح بمقال اليوم عن كيفية تطوير مكتبة برمجية قابلة للتثبيت عن طريق Composer
قبل نبدأ المقال أنصحك بقراءة

https://3alam.pro/articles/php/composer-introduction/وايضا قراءة

https://3alam.pro/articles/php/how-to-use-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" مع إضافة بنهاية الوسم إختيارية مثل 

  1. -patch او -p
  2. -alpha او -a
  3. -beta او -b
  4. -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 كما بالصورة


1.jpg

قم بتحديد مجلد المشروع الذي قمنا بإنشائه بالمقال بعد التسمية 
بعدها ستظهر لك نافذة كالتالي 

1-1.jpg

قم بالضغط Create and Add بعدها سيظهر لك التالي 

2.jpg

خطوة مهمة الآن كما تلاحظ ان Github يخبرك بوجود ملفات جديدة تم إضافتها لمكتبتك
وتحتاج إلى نشرها ولاحظ العدد هنا 370 ملف جاهزة للنشر الى موقع GitHub ولكن 
يمكن تقليص هذه الملفات الى المهمة التي قمنا نحن بتطويرها بانفسنا بتجاهل المجلد 
vendor بحيث ان Composer سيتكفل بعملية تركيب المكتبات لنا عند طلبها

الآن أذهب إلى Repository ثم Repository Settings

3.jpg

بعدها ستظهر لك نافذة إعدادات المشروع قم بالظغط على Ignored Files 
ومن هنا تستطيع إضافة الملفات و المجلدات التي لاترغب بنشرها عند رفع 
المشروع الى  GitHub الآن قم بإضافة مايظهر في الصورة لتجاهل مجلد 
vendor وملف composer.lock 

4.jpg

بعد الإضافة إضغط على زر Save لحفظ التغييرات سيظهر لك التالي 

5.jpg

لاحظ أنه من 370 ملف تم تقليص عدد الملفات الى 6 ملفات فقط الأن كما في الصورة قم
بالتعبئة كالتالي

  1. العنوان: مختصر لوصف التغيرات التي حصلت عند نشرها
  2. الوصف: وصف مفصل للتغيرات التي حصلت حتى يفهم بقية المطورين ماذا حصل
  3. زر الإعتماد: بالضغط عليه انت تقوم باعتماد التغيرات لتصبح بعدها جاهزة للنشر

بعد الضغط على زر Commit ستصبح التغيرات والملفات جاهزة للنشر على موقع GitHub
بعدها أذهب إلى زر Publish لنشر المشروع إلى GitHub كما هو موظح بالصورة

6.jpg

بعدها ستظهر لك نافذة إعداد بيانات المشروع على موقع GitHub 

7.jpg

الآن قم بتعبئة البيانات المطلوبة لنشر المشروع كالتالي

  1. اسم المكتبة على موقع GitHub
  2. وصف لعمل المكتبة
  3. إذا كنت ترغب ان يكون المشروع خاص ولايسمح لاي احد الدخول عليه إلا بتصريح منك 
    قم بإختيار هذا الخيار مع العلم انه ليس مجاني يتم تفعيله برسوم شهرية او سنوية
    لن اقوم باختياره حتى يستطيع الكل مشاهدة المكتبة بدون صلاحيات
  4. زر النشر على موقع 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 
بكل سهولة ولها اسم ولها متطلبات من مكتبات أخرى ليقوم اي مطور بتثبيتها 
بأمر واحد بدون مشاكل 

أتمنى ان يكون المقال ذو فائدة لكم ولمشاريعكم البرمجية

كلمات دليلية:
0
إعجاب
2196
مشاهدات
0
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (2)

محمود الزهراني:

ممتاز ياعلي مبدع من يومك 

يعطيك العافيه :)

Ali Majrashi:

ممتاز ياعلي مبدع من يومك 

يعطيك العافيه :)

الله يعافيك :wub:

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !