- سهشنبه 3 بهمن 1396 ساعت 19:16
- 1.7.1
- در حال تکمیل
- فعال
کتابخانهها در کامپوزر، چیزهایی هستند که با سوار شدن روی پروژه شما قابلیتهایی را در اختیار شما قرار میدهند. قبلا در کاربردهای اصلی کامپوزر گفتیم که کامپوزر ابزاری برای مدیریت وابستگیها در PHP است که کتابخانههایی که پروژه شما به آنها نیاز دارد را معرفی، نصب و بروزرسانی کنید. در این مطلب نحوه قابل نصب کردن کتابخانهها را بررسی میکنیم.
هر پروژه یک پکیج است
به محض اینکه شما فایل composer.json
را در یک دایرکتوری داشته باشید، آن دایرکتوری یک پکیج است. وقتی شما یک ویژگی (پراپرتی) با نام require به پروژهتان اضافه میکنید، در واقع پکیجتان را به پکیج دیگری وابسته کردهاید. تنها تفاوت بین پروژه شما و یک کتابخانه این است که پروژه شما یک پکیج بدون نام است.
گفتم که تفاوت یک کتابخانه با پکیج شما، بدون نام بودن آن است، برای قابل نصب ساختن پکیجتان باید به آن یک نام اختصاص بدهید. برای اینکار باید ویژگی name را به composer.json اضافه کنید:
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
در این مثال نام پروژه acme/hello-world
است، که در اینجا acme
نام شرکت توسعه دهنده پروژه (vendor) است که نوشتن آن اجباری است. نکته: اگر نمیدانید که چه نامی را به عنوان نام vendor انتخاب نمایید، معمولا نام کاربری شما در گیتهاب گزینه خوبی است. با اینکه نام پکیجها حساس به حروف کوچک و بزرگ نیستند، ولی به طور قراردادی تمام کلمات با حروف کوچک نوشته میشوند و کلمات با خط تیره (-) از یکدیگر جدا میشوند.
نسخهگذاری کتابخانه
در اکثر قریب به اتفاق موارد، کتابخانههایتان را با استفاده از یکی از انواع سیستمهای کنترل نسخه (VCS) مانند گیت (git) یا svn نگهداری میکنید. در این موارد کامپوزر به صورت خودکار با کمک سیستم کنترل نسخه مورد استفاده شما به ورژنهای برنامه شما پی میبرد و شما نباید ویژگی نسخه (version) را در فایل composer.json
به کار ببرید. (اگر تمایل دارید تا درباره نحوه استفاده کامپوزر از شاخهها و برچسبهای سیستم کنترل نسخه برای رفع محدودیتهای نسخه استفاده کنید، نسخهها و محدودیتها در کامپوزر را مطالعه کنید.) اگر به هر دلیلی از هیچ سیستم کنترل نسخهای برای نگهداری پکیجتان استفاده نمیکنید، باید صراحتا نسخه (version) پکیجتان را با استفاده از ویژگی version
در فایل composer.json مشخص کنید:
{
"version": "1.0.0"
}
اصطلاحات فنی
هاردکد یک سبک برنامهنویسی است که برای مثال اگر شما از استایل هاردکد پیروی کنید دادهها را به صورت دستی در سورس کد برنامه خود وارد میکنید، ولی اگر از این استایل پیروی نکنید، دادهها را با استفاده از فرمها از کاربر میگیرید و بعد از اعتبارسنجی استفاده میکنید. هاردکد کردن به معنی این است که شما میخواهید چیزی را در برنامهتان یا هر پروژهای جاسازی کنید و به طور مستقیم قابل تغییر نباشد. برای مثال اگر شما از یک سرور دیتابیس استفاده می کنید، پس شما باید پروژهتان را به صورت هاردکد به دیتابیس متصل کنید و کاربر نتواند آن را تغییر دهد.نسخهگذاری سیستم کنترل نسخه
کامپوزر از ویژگیهای برچسب و شاخهِ سیستم کنترل نسخه شما برای رفع محدودیتهایی که شما در فیلد require
برای مجموعهای مشخص از فایلها تعیین کردهاید، استفاده میکند. در هنگام مشخص کردن نسخههای معتبر موجود، کامپوزر نگاهی به تگها، شاخهها و نام آنها را در یک لیست داخلی از گزینهها ترجمه میکند که با محدودیت نسخه شما مطابقت دارد. برای کسب اطلاعات بیشتر درباره رفتار کامپوزر با تگها و شاخهها و نحوه رفع محدودیتهای نسخه پکیج، نسخهها و محدودیتها در کامپوزر را بخوانید.
فایل قفل
ممکن است بخواهید فایل composer.lock
را برای کتابخانهتان کامیت کنید. این کار میتواند به اعضای تیم شما کمک کند تا همیشه نسخه یکسان از وابستگیهای را استفاده کنند. با این حال، این فایلِ قفل هیچ اثری بر روی سایر پروژههایی که به آن بستگی دارند ندارد. این فقط بر روی پروژه اصلی تاثیر دارد. اگر از گیت استفاده میکنید و نمیخواهید فایل قفل را کامیت کنید، بهتر است آن را به .gitignore
اضافه کنید.
انتشار در یک سیستم کنترل نسخه
هنگامی که یک مخزن در یک سیستم کنترل نسخه (به عنوان مثال گیت) دارید که حاوی فایل composer.json
است، کتابخانه شما از طریق کامپوزر قابل نصب است. در این مثال ما کتابخانه acme/hello-world
را در آدرس github.com/username/hello-world
در گیت هاب منتشر میکنیم. حالا، برای نصب پکیج acme/hello-world
، یک پروژه جدید را به صورت محلی با نام acme/blog
ایجاد میکنیم. این وبلاگ acme/hello-world
به acme/hello-world
بستگی دارد که خود به monolog/monolog
وابسته است. اینکار را می توانیم با ساخت یک دایرکتوری با نام blog
و قرار دادن فایل composer.json
با محتوای زیر انجام دهید:
{
"name": "acme/blog",
"require": {
"acme/hello-world": "dev-master"
}
}
در این مورد، نیازی به پارامتر name
نیست، چون ما نمیخواهیم وبلاگ را به عنوان یک کتابخانه منتشر کنیم. و اضافه کردن این پارامتر در اینجا برای مشخص کردن این بوده که کدام composer.json
تعریف شده است. حالا باید به اپلیکیشن وبلاگ بگوییم که وابستگی hello-world
را پیدا کند. اینکار را با اضافه کردن مشخصات مخزن یک پکیج به composer.json
وبلاگ انجام میدهیم:
{
"name": "acme/blog",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/username/hello-world"
}
],
"require": {
"acme/hello-world": "dev-master"
}
}
این همه کاری است که باید انجام دهید، حالا میتوانید با استفاده از دستور نصب کامپوزر ( composer install
) همه وابستگیها را نصب کنید.
composer.json
میتواند با مشخص کردن مخزن پکیج و تعریف وابستگی در فیلد require
به پروژه شما اضافه شود.انتشار در پکیجیست
همچنین پکیجها را میتوانید منتشر کنید. اما هر دفعه مشخص کردن مخزن سیستم کنترل نسخه عملی دست و پا گیر است و شما نمیخواهید همه کاربرانتان را مجبور به این کار کنید. چیز دیگری که ممکن است متوجه شده باشید این است که برای monolog/monolog
هیچ مخزن پکیجی تعریف نکردیم. اما اینکار چگونه انجام میشود؟ پاسخ پکیجیست است. پکیجیست مخزن اصلی پکیج کامپوزر است و به صورت پیشفرض فعال است. هر چیزی که در پکیجیست منتشر شود به صورت خودکار از طریق کامپوزر در دسترس است. با توجه به اینکه Monolog در Packagist در پکیجیست موجود است، ما میتوانیم بدون نیاز به مشخص کردن هرگونه مخزن اضافی بستگی داشته باشیم. اگر میخواهید hello-world
را با سایر توسعهدهندگان به اشتراک بگذارید، باید آن را در پکیجیست منتشر کنید که کار بسیار سادهای است. کافی است به سایت پکیجیست بروید و دکمه "Submit" را فشار دهید. سپس باید ثبت نام کنید (البته اگر عضو نیستید) و در نهایت به شما اجازه انتشار لینک مخزن سیستم کنترل نسخهتان را میدهد، سپس شروع به خزیدن در پکیجتان میکند. هنگامی که این کار را انجام دهید، پکیج شما برای همه در دسترس است.
سایر پستهای داکیومنت
- مقدمه
- کاربردهای اصلی
- کتابخانهها
- دستورات و رابط خط فرمان در صف ترجمه
- The composer.json Schema در صف ترجمه
- Repositories در صف ترجمه
- Config در صف ترجمه