کاربردهای اصلی

این مطلب نصب کامپوزر و برخی از کاربردهای اصلی کامپوزر از جمله راه اندازی پروژه، نصب و آپدیت وابستگی‌ها و بارگذاری خودکار پکیج‌ها را پوشش می‌دهد. کامپوزر یک ابزار مدیریت وابستگی برای PHP است، منظور از مدیریت وابستگی‌ها (Dependency Manager)، مدیریت نصب و آپدیت پکیج‌ها، ماژول‌ها، کتابخانه‌ها و فایل‌های مورد نیاز پروژه است. استفاده از کامپوزر علاوه بر اینکه از لحاظ زمان سرعت شما را بسیار بالا می‌برد، به دلیل اینکه به صورت اتوماتیک فایل‌ها و کلاس‌های مرتبط را دانلود می‌کند، بروز خطاهای مربوط به پکیج‌ها را نیز کاهش می‌دهد.

لوگو کامپوزر

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

پیش نیازها

مدیریت وابستگی‌ها مفهوم جدیدی نیست و در واقع composer  از ابزار NPM در Nodjs و bandler در Roby الهام گرفته شده است. کامپوزر برای اجرا به PHP 5.3.2 نیاز دارد. تنظیمات دیگری نیز وجود دارد که در زمان نصب به شما هشدار داده می شود.

نصب کامپوزر

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

محلی

نصب کننده برخی از تنظیمات php را بررسی می‌کند و سپس فایل composer.phar را در دایرکتوری پروژه شما دانلود می‌کند.

اصطلاحات فنی

  • سامانه مدیریت پکیج که به آن مدیر پکیج و مدیر بسته نیز می‌گویند مجموعه‌ای از ابزارهایی است که پروسه نصب، آپدیت، پیکربندی و حذف برنامه‌های کامپیوتر را به صورت خودکار انجام می‌دهند. مدیر بسته معمولا شامل پایگاه داده‌ای حاوی نسخه بسته نرم‌افزاری و وابستگی‌های آن است؛ این اطلاعات از تداخل بسته‌ها با یکدیگر جلوگیری بعمل آورده و همهٔ پیش نیازهای نصب یک بسته نرم‌افزاری را فراهم می‌آورد.
  • فرمت پکیج نوعی از آرشیو است که شامل برنامه‌های کامپیوتر و فراداده‌های (metadata) اضافی مورد نیاز سامانه‌های مدیریت پکیج است.
  • فایل PHAR، یک فرمت پکیج است که  توزیع اپلیکیشن‌ها و کتابخانه‌ها را در یک فایل آرشیو PHP با بسته‌بندی تعدادی از فایل‌های PHP و سایر منابع مانند عکس‌ها، فایل‌های stylesheet و ...، ممکن می‌سازد.

حالا برای اجرا php composer.phar را در خط فرمان اجرا کنید. برای نصب کامپوزر به صورت محلی در یک دایرکتوری خاص از آپشن --install-dir و همچنین از آپشن --filename برای نامگذاری آن استفاده کنید.

php composer-setup.php --install-dir=bin --filename=composer

حالا کافیست php bin/composer را اجرا کنید.

سراسری

فایل composer.phar را هر جایی که تمایل دارید قرار دهید، اگر آن را در یک دایرکتوری قرار دهید که بخشی از مسیر شما است، می‌توانید به آن به صورت سراسری دسترسی داشته باشید.

توجه: در سیستم‌های بر پایه یونیکس (مک، اوبونتو، فدورا و سایر توزیع‌های لینوکس)، نیازی به استفاده مستقیم مفسر PHP نیست، یعنی می‌توانید به جای php composer از composer استفاده کنید.

با استفاده از فایل نصب

ابتدا کامپوزر را از سایت رسمی آن دانلود و اجرا کنید. در مرحله بعد مسیر نصب php را باید مشخص کنید. در مرحله سوم تنظیمات مربوط به پروکسی را خالی بگذارید. مرحله بعد با زدن دکمه Install کامپوزر نصب می شود. برای تست اینکه کامپوزر درست نصب شده، در CMD (با دکمه win + R و تایپ cmd) باید Composer را تایپ کنید و Enter را بزنید.

نصب کامپوزر در لینوکس

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

راه اندازی پروژه

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

کلید require

اولین (و اغلب تنها) چیزی که شما در فایل composer.json مشخص می‌کنید، کلید require است. خیلی ساده به کامپوزر می‌گویید که پروژه شما به کدام پروژه‌ها وابستگی دارد.

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

همانطور که می‌بینید، require یک شی می‌گیرد که نام پکیج (مثلا monolog/monolog) و ورژن محدودیت‌های آن (مثلا 1.0.*) را مشخص می‌کند. کامپوزر از این اطلاعات برای جستجوی مجموعه مناسب از فایل‌ها در پکیج repositories، که در Packagist (مخزن پکیج پیش فرض) یا با استفاده از کلید repositories ثبت می‌کنید، استفاده می‌کند. در مثال بالا، چون مخزن دیگری در composer.json ثبت نشده است، پکیج monolog/monolog را که در Packagist ثبت شده به آن اختصاص می‌دهد.

نام‌های پکیج

نام پکیج شامل یک نام vendor و نام پروژه است. اغلب ممکن است همنام باشند، مثلا در لاراول laravel/laravel یعنی همنام هستند، ولی در نسخه 2 (advanced) فریمورک Yii به صورت yiisoft/yii2-app-advanced می‌باشد که نام vendor نام شرکت توسعه‌دهنده آن یعنی yiisoft و نام پروژه yii2-app-advanced است. دلیل استفاده از دو نام نیز جلوگیری از تداخل نام‌ها است، چون ممکن است دو نفر بخواهند پروژه همنامی بسازند.

محدودیت‌های ورژن پکیج

در مثال ما، ما برای پکیج Monolog، محدودیت ورژن 1.0.* قرار داده‌ایم، یعنی هر ورژنی که در شاخه توسعه 1.0 و بالاتر و کمتر از 1.1 است.

نصب وابستگی‌ها

برای نصب وابستگی‌ها تعریف شده برای پروژه خود، تنها کافیست که  install را در خط فرمان اجرا کنید:

php composer.phar install

وقتی این دستور را اجرا می‌کنید، یکی از این دو ممکن است رخ دهد:

نصب بدون composer.lock

اگر این دستور را تا کنون اجرا نکرده باشید و همچنین فایل composer.lock وجود نداشته باشد، کامپوزر تمام وابستگی‌ها در فایل composer.json را لیست می‌کند و آخرین ورژن از فایل‌های آن‌ها را  دانلود می‌کند و در دایرکتوری vendor در پروژه شما قرار می‌دهد. (دایرکتوری vendor محلی مرسوم و قراردادی برای نگهداری تمام کدهای شخص ثالث در پروژه شما است). در مثل بالا فایل‌های سورس Monolog در vendor/monolog/monolog/ قرار می‌گیرند. اگر Monolog وابستگی‌های دیگری را لیست کند، آنها نیز در پوشه vendor قرار می‌گیرند.

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

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

نصب با composer.lock

اگر وقتی شما composer install را اجرا می‌کنید، علاوه بر فایل composer.json، یک فایل composer.lock نیز از قبل وجود داشته باشد، یعنی شما قبلا install را اجرا کرده باشید یا فرد دیگری این دستور را در پروژه اجرا کرده باشد و فایل composer.lock را به پروژه Commit کرده باشد. در هر دو حالت، اجرای دستور install در حالی که فایل composer.lock از قبل وجود دارد، تمام وابستگی‌های لیست شده در composer.json را نصب می‌کند، اما کامپوزر دقیقا ورژن‌هایی از وابستگی‌ها را نصب می‌کند که در فایل composer.lock لیست شده‌اند تا مطمئن شود که همه توسعه‌دهندگانی که در حال کار روی پروژه هستند، از ورژن‌های منطبق با هم برای پکیج‌ها استفاده می‌کنند، این حالت نوعی قفل‌گذاری روی ورژن‌ها می‌باشد. در نتیجه‌ شما تمام وابستگی‌های خواسته شده از composer.json را دارید، گرچه ممکن است آخرین ورژن نباشند، اما می‌توانید مطمئن باشید که پروژه شما به خاطر تغییرات غیرمنتظره در وابستگی‌ها به مشکل برنخواهد خورد.

کامیت فایل composer.lock به سیستم کنترل نسخه

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

آپدیت وابستگی‌ها به آخرین ورژن‌ها

همانطور که در بالا گفته شد، فایل composer.lock از آپدیت خودکار وابستگی‌ها جلوگیری می‌کند. برای آپدیت به آخرین ورژن، کامند update را اجرا کنید. این دستور آخرین ورژن دارای تطبیق را (مطابق با فایل  composer.json) می‌گیرد و فایل composer.lock را با ورژن‌های جدید بازنویسی می‌کند. (این عمل معادل حذف فایل composer.lock و اجرای دوباره کامند install است.)

php composer.phar update
نکته: اگر زمانی که کامند instal را اجرا می‌کنید، فایل‌های composer.lock و composer.json از نظر زمانی با هم منطبق نباشند، یک خطا از نوع Warning نمایش داده می‌شود.

اگر می‌خواهید یک وابستگی را نصب یا آپدیت کنید، می‌بایست آن را در لیست سفید قرار دهید:

php composer.phar update monolog/monolog [...]

Packagist

مخزن (repository) اصلی کامپوزر Packagist است. مخزن کامپوزر اساسا یک منبع پکیج است، یعنی جایی که شما می‌توانید پکیج‌ها را از آنجا دریافت کنید. توصیه می‌شود که هر پروژه متن بازی (Open source) با استفاده از کامپوزر، پکیج‌های خود را در Packagist منتشر کند.

بارگذاری خودکار

یکی دیگر از قابلیت‌های کامپوزر مدیریت لود کلاس‌ها است، بدین معنی که تنها زمانی کلاسی را لود می‌کند که آن کلاس فراخوانی شود. وقتی که پکیج‌های مختلفی داریم، نیاز به بارگذاری خودکار آنها نیز داریم. کامپوزر برای کتابخانه‌هایی که اطلاعات بارگذاری خودکار را مشخص می‌کنند، یک فایل autoload.php در پوشه vendor تولید می‌کند، که این فایل قادر است تا تمامی فایل‌ها را به صورت خودکار در پروژه بارگذاری کند. شما به سادگی می‌توانید این فایل را include کرده و بدون هیچ کار اضافه دیگری، استفاده از کلاس‌هایی که آن کتابخانه‌ها ارائه می‌دهند را شروع کنید.

require __DIR__ . '/vendor/autoload.php';

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');

حتی شما می‌توانید کد خودتان را با افزودن یک فیلد autoload به composer.json به Autoloader اضافه کنید.

{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}
نکته: کامپوزر بارگذار خودکار (Autoloader) خودش را ارائه می‌دهد. اگر شما نمی‌خواهید از آن استفاده کنید، می‌توانید فایل‌های vendor/composer/autoload_*.php را include کنید که آرایه‌های انجمنی را برمی‌گرداند که به شما اجازه می‌دهد تا بارگذار خودکارتان را پیکربندی کنید.

در این مطلب برخی از کاربردهای اصلی کامپوزر را بررسی کردیم، سلسله مطالب مرتبط را می‌توانید از طریق برچسب مطالب مرتبط با کامپوزر دنبال نمایید.

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