کتابخانه‌ها

کتابخانه‌ها در کامپوزر، چیزهایی هستند که با سوار شدن روی پروژه شما قابلیت‌هایی را در اختیار شما قرار می‌دهند. قبلا در کاربردهای اصلی کامپوزر گفتیم که کامپوزر ابزاری برای مدیریت وابستگی‌ها در PHP است که کتابخانه‌هایی که پروژه شما به آن‌ها نیاز دارد را معرفی، نصب و بروزرسانی کنید. در این مطلب نحوه قابل نصب کردن کتابخانه‌ها را بررسی می‌کنیم. کتابخانه‌ها در کامپوزر

هر پروژه یک پکیج است

به محض اینکه شما فایل composer.json را در یک دایرکتوری داشته باشید، آن دایرکتوری یک پکیج است. وقتی شما یک ویژگی (پراپرتی) با نام require به پروژه‌تان اضافه می‌کنید، در واقع پکیج‌تان را به پکیج دیگری وابسته کرده‌اید. تنها تفاوت بین پروژه شما و یک کتابخانه این است که پروژه شما یک پکیج بدون نام است.

نکته: فایل composr.json بر پایه json نوشته شده است و دارای ویژگی‌هایی است که هر کدام خاصیت خاصی از پکیج را مشخص می‌کند، برای مثال ورژن، توضیح کوتاه، تاریخ انتشار، لایسنس و ... را می‌توانید با استفاده از این ویژگی‌ها مشخص کنید. البته این مورد خارج از حوصله این مطلب است، در صورت تمایل به کسب اطلاعات بیشتر توصیه می کنیم  برچسب مطالب مرتبط با کامپوزر را دنبال کنید.

گفتم که تفاوت یک کتابخانه با پکیج شما، بدون نام بودن آن است، برای قابل نصب ساختن پکیج‌تان باید به آن یک نام اختصاص بدهید. برای اینکار باید ویژگی 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"
}
نکته: وقتی شما یک نسخه هاردکد (hardcode) را به سیستم کنترل نسخه خود اضافه می‌کنید، بین نام‌های برچسب با نسخه تداخل به وجود می‌آید. کامپوزر قادر به تشخیص شماره نسخه نخواهد بود.

اصطلاحات فنی

هاردکد یک سبک برنامه‌نویسی است که برای مثال اگر شما از استایل هاردکد پیروی کنید داده‌ها را به صورت دستی در سورس کد برنامه خود وارد می‌کنید، ولی اگر از این استایل پیروی نکنید، داده‌ها را با استفاده از فرم‌ها از کاربر می‌گیرید و بعد از اعتبارسنجی استفاده می‌کنید. هاردکد کردن به معنی این است که شما می‌خواهید چیزی را در برنامه‌تان یا هر پروژه‌ای جاسازی کنید و به طور مستقیم قابل تغییر نباشد. برای مثال اگر شما از یک سرور دیتابیس استفاده می کنید، پس شما باید پروژه‌تان را به صورت هاردکد به دیتابیس متصل کنید و کاربر نتواند آن را تغییر دهد.

نسخه‌گذاری سیستم کنترل نسخه

کامپوزر از ویژگی‌های برچسب و شاخهِ سیستم کنترل نسخه شما برای رفع محدودیت‌هایی که شما در فیلد 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) همه وابستگی‌ها را نصب کنید.

خلاصه: هر مخزنِ git/svn/hg/fossil شامل یک فایلِ composer.json می‌تواند با مشخص کردن مخزن پکیج و تعریف وابستگی در فیلد require به پروژه شما اضافه شود.

انتشار در پکیجیست

همچنین پکیج‌ها را می‌توانید منتشر کنید. اما هر دفعه مشخص کردن مخزن سیستم کنترل نسخه عملی دست و پا گیر است و شما نمی‌خواهید همه کاربرانتان را مجبور به این کار کنید. چیز دیگری که ممکن است متوجه شده باشید این است که برای monolog/monolog هیچ مخزن پکیجی تعریف نکردیم.  اما اینکار چگونه انجام می‌شود؟ پاسخ پکیجیست است. پکیجیست مخزن اصلی پکیج کامپوزر است و به صورت پیش‌فرض فعال است. هر چیزی که در پکیجیست منتشر شود به صورت خودکار از طریق کامپوزر در دسترس است. با توجه به اینکه Monolog در Packagist در پکیجیست موجود است، ما می‌توانیم بدون نیاز به مشخص کردن هرگونه مخزن اضافی بستگی داشته باشیم. اگر می‌خواهید hello-world را با سایر توسعه‌دهندگان به اشتراک بگذارید، باید آن را در پکیجیست منتشر کنید که کار بسیار ساده‌ای است. کافی است به سایت پکیجیست بروید و دکمه "Submit" را فشار دهید. سپس باید ثبت نام کنید (البته اگر عضو نیستید) و در نهایت به شما اجازه انتشار لینک مخزن سیستم کنترل نسخه‌تان را میدهد، سپس شروع به خزیدن در پکیج‌تان می‌کند. هنگامی که این کار را انجام دهید، پکیج شما برای همه در دسترس است.

منبع
Libraries
اشتراک‌گذاری