23
تشکر

آشنایی با Composer

Composer

Composer

برنامه نویسانی که با فریم ورک Laravel کار کرده باشند احتمالا با Composer هم آشنایی دارند. همچنین نسخه جدید فریم ورک YII نیز از Composer استفاده میکند. اما Composer چیست؟

بیشتر زبان ها یا حتی برنامه های مختلف دارای برنامه ای با نام مدیریت پکیج ها هستند. برای مثال در زبان NodeJS از همان ابتدا برنامه npm برای مدیریت پکیج های NodeJS در نظر گرفته شد. یا در زبان Ruby اینکار بر عهده برنامه bundler است. حتی در Front-End اینکار را برنامه های Component و Bower انجام میدهند. همچنین نرم افزار هایی مثل Sublime text یا Atom نیز دارای برنامه مدیریت پکیج هستند.

اما این خلاء در زبان PHP مشاهده میشد. تا اینکه Nils Adermann و Jordi Boggiano برنامه ای برای زبان PHP با نام Composer ساختند تا کار مدیریت پکیج های آن را به عهده بگیرد. به گفته خود Composer این برنامه، یک برنامه مدیریت وابستگی ها (Dependency Managaement) است، اما این برنامه مدیریت لود کلاس های شما را نیز بر عهده میگیرد.

Composer کتابخانه هایی را که شما در یک پروژه به آن نیاز دارید را نصب میکند، و هر زمان که نسخه ی جدیدی از آن آماده باشد، کتابخانه را آپدیت میکند. همچنین ممکن است یک کتابخانه به کتابخانه ها یا برنامه های دیگری نیز وابستگی داشته باشد که Composer به صورت هوشمند این وابستگی ها را نیز برطرف میکند.

حالا دیگر Composer بخشی جدانشدنی از PHP شده است و کار با PHP را بسیار آسانتر کرده است.

برای آشنایی بیشتر با Composer در ادامه مطلب همراه ما باشید…

 کدام نسخه PHP؟

Composer بر روی PHP نسخه 5.3.2 به بالا اجرا میشود. پیشنهاد میشود برای جلوگیری از بوجود آمدن خطاهای احتمالی از PHP نسخه 5.3.4 به بالا استفاده کنید.

نصب Composer

Linux / Unix/ OSX

در این سیستم عامل ها با دو خط کد زیر Composer به صورت Globally نصب میشود.

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Windows

در این سیستم عامل هم با دانلود فایل exe. آن، میتوانید Composer را نصب کنید.

مخازن Composer

اما Composer از کجا برنامه هایی که ما به آنها نیاز داریم را نصب میکند؟ مخزن اصلی Composer سایت packagist.org است. این سایت دارای لیست بلندی از کتابخانه های ثبت شده در Composer است. اما شما میتوانید از مخازن دیگری مانند Github نیز استفاده کنید. تمام کتابخانه های متن باز PHP درون Composer توسط توسعه دهندگان همان کتابخانه ثبت میشوند و شما خیلی به ندرت احتیاج به مخازن دیگر پیدا میکند.

کتابخانه های مورد استفاده در Composer باید حتما دارای فایلی با نام composer.json باشند که در ادامه در مورد آن صحبت میکنیم.

 استفاده از Composer

در ابتدا باید مشخص کنیم که ما به کدام کتابخانه PHP درون پروژه نیاز داریم. برای مثال ما میخواهیم از کتابخانه smarty استفاده کنیم. این کتابخانه مانند خیلی از کتابخانه های دیگر درون Composer ثبت شده است.

نکته: نام هر پکیج یا کتابخانه، درون Composer از دو قسمت تشکیل شده است (Vendor/Name). قسمت Vendor بیشتر معرفی کننده نام شخص، گروه، پروژه، شرکت و … است و قسمت دوم معرفی کننده نام کتابخانه یا پکیج است.

در این مثال نام کامل پکیج smarty درون Composer به صورت smarty/smarty است. شما میتوانید هر تعداد دیگری که بخواهید به لیست وابستگی های پروژه تان اضافه کنید. که در اینجا ما کلاس mpdf/mpdf را نیز اضافه میکنیم.

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

پس یک فایل جدید با نام composer.json در ریشه پروژه ایجاد میکنیم، و با کدهای زیر آن را پر میکنیم.

{
    "require": {
        "smarty/smarty": "3.*",
        "mpdf/mpdf": ">=5.7"
    }
}

همانطور که در کدهای بالا مشاهده میکنید، شما میتوانید مشخص کنید که به کدام نسخه از پکیج وابستگی دارد. حالا با استفاده از ترمینال یا خط فرمان ویندوز به روت پروژه میرویم و دستور زیر را اجرا میکنیم. با استفاده از این دستور تمامی پکیج های لیست شده در composer.json نصب خواهند شد.

composer install

پس از اجرای دستور بالا تمام پکیج ها درون مسیر vendor ذخیره خواهند شد. دستورات دیگری نیز مانند composer update یا composer uninstall نیز وجود دارند که پکیج ها را نصب یا حذف میکنند.

استفاده از Autoloading

اگر با مبحث Autoloading آشنا نیستید بهتر است ابتدا مطلب استاندارد PSR-0 در PHP را مطالعه کنید.

همانطور که گفتیم Composer علاوه بر اینکه پکیج ها را نصب و مدیریت میکند، کار لود کردن کلاس ها را نیز بر عهده میگیرد. Composer برای اینکار از روشهای مختلفی مانند PSR-0 و PSR-4 استفاده میکند. برای استفاده از Autoloading فقط کافیست کد زیر را در ابتدای فایلهایتان قرار بدهید. با اینکار از هر کلاسی از پکیج های نصب شده استفاده کنید خود Compsoer آن را لود میکند و نیاز به require دستی نیست.

require 'vendor/autoload.php';

مثال:

require 'vendor/autoload.php';

$smarty = new Smarty;
$smarty->addTemplateDir(__DIR__.'/templates');
$smarty->display('index.tpl');

استفاده از Autoloadind در خود پروژه

خب اگر بخواهیم از Autoloading در خود پروژه استفاده کنیم، چه کاری باید انجام دهیم. برای مثال ساختار پروژه ما به صورت زیر است:

Root
    \classes
    \classes\Post.php
    \vendor
    \index.php
    \composer.json

تمام کلاسهای ما درون پوشه classes قرار دارد. حالا چطور میتوانیم با استفاده از Autoloding از این کلاس ها استفاده کنیم؟

برای اینکار به فایل composer.json میرویم و آن را به صورت زیر آپدیت میکنیم.

{
    "require": {
        "smarty/smarty": "3.*",
        "mpdf/mpdf": ">=5.7"
    },
    "autoload": {
        "psr-4": {
            "Classes\\": "classes/"
        }
    }
}

حالا برای اینکه داده های Composer بروزرسانی شوند دستور composer dump-autoload را درون ترمینال اجرا میکنیم. سپس براحتی میتوانیم از کلاسهایمان استفاده کنیم. مثال:

require 'vendor/autoload.php';
use Classes\Post;

$p = new Post;
echo $p->ec();

Composer از روشهای مختلفی برای Autoloading استفاده میکند که PSR-4 و PSR-0 تنها دو تا از آنها میباشند. برای مطالعه بیشتر بهتر است به اسناد Composer مراجعه کنید.

نتیجه گیری

با استفاده از Composer دیگر شما نیازی ندارید در هنگام تحویل پروژه محتویات پوشه vendor را هم بدهید، بلکه هر کسی که دستور composer install را اجرا کند میتواند این پکیج ها را نصب کند. شما هم میتوانید به راحتی کتابخانه های PHPیتان را به عنوان یک پکیج Composer در اختیار برنامه نویسان دیگر قرار دهید.

نکته: میتوانید برای ساخت فایل composer.json از دستور composer init نیز استفاده کنید.

  • edris می‌گه:

    بسیار عالی

  • خیلی توضیحات مختصر بود تقریبا هیچی متوجه نشدم 😐

    • محمد جهانی می‌گه:

      پست بنا بر عنوانش، «آشنایی» هستش. با کمی جستجو و مطالعه، میشه بیشتر از اینا یاد گرفت. گرچه به نظر من پست کامل و خوبی بود. کدوم بخش مختصر بود؟

  • کامیاب می‌گه:

    تشکر فراوان

  • آروین می‌گه:

    سلام.
    خیلی عالی بود. واقعا متشکرم.


  • نظرات این مطلب بسته است.