Composer چیست؟

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

در مدل‌های جدید توسعه PHP (لاراول، سیمفونی، وردپرس مدرن و پروژه‌های سفارشی)، تقریبا هیچ پروژه جدی بدون Composer توسعه داده نمی‌شود. Composer کارهایی را که قبلا دستی و پرخطا بودند (دانلود، مدیریت نسخه، autoload کلاس‌ها و هماهنگی تیم) به فرآیندی سریع، قابل تکرار و امن تبدیل کرده است.

کامپوزر - Composer

چرا Composer ضروری است؟

  • مدیریت آسان وابستگی‌ها
    دیگر نیازی به دانلود دستی کتابخانه‌ها و کپی کردن آن‌ها در پروژه نیست.
  • کنترل نسخه دقیق
    با استفاده از Semantic Versioning می‌توانید محدوده مجاز نسخه‌ها را مشخص کنید.
  • هماهنگی تیم و محیط‌ها
    همه اعضای تیم و سرورهای production همان نسخه‌هایی را دریافت می‌کنند که تست شده‌اند.
  • امنیت و به‌روزرسانی
    امکان بررسی آسیب‌پذیری‌ها با composer audit و به‌روزرسانی کنترل‌شده وجود دارد.
  • Autoloading استاندارد
    PSR-4 و Classmap به صورت خودکار مدیریت می‌شوند.
  • اکوسیستم گسترده
    بیش از صدها هزار پکیج روی Packagist.org در دسترس است.

فریم‌ورک‌هایی مثل Laravel بر پایه Composer ساخته شده‌اند و دستورات artisan و نصب پکیج‌ها از طریق آن انجام می‌شود.

نصب Composer

برای مشاهده‌ی راهنمای نصب کامپوزر با فایل نصب روی ویندوز اینجا کلیک کنید
روی سیستم‌های مدرن Composer به صورت سراسری نصب می‌شود:

یا در بسیاری از توزیع‌های لینوکس و macOS با مدیر بسته سیستم:

پس از نصب، دستور composer --version را اجرا کنید تا از صحت نصب مطمئن شوید. کامپوزر ۲ بسیار سریع‌تر و امن‌تر از نسخه ۱ است.

ساختار اصلی و نحوه کار

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

یک نمونه‌‌ی ساده از فایل composer.json

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

دستور کاربرد
composer install نصب وابستگی‌ها بر اساس composer.lock (یا ایجاد lock اگر وجود نداشته باشد). دستور اصلی برای محیط واقعی و کار تیمی
composer update به‌روزرسانی وابستگی‌ها بر اساس محدودیت‌های composer.json و بازنویسی composer.lock
composer require vendor/package افزودن پکیج جدید و به‌روزرسانی فایل‌ها
composer require --dev vendor/package افزودن پکیج فقط برای محیط توسعه
composer remove vendor/package حذف پکیج
composer dump-autoload بازسازی فایل autoload بدون نصب مجدد
composer audit بررسی آسیب‌پذیری‌های امنیتی شناخته‌شده
composer outdated نمایش پکیج‌هایی که نسخه جدیدتر دارند

پس از اجرا، پوشه vendor/ ساخته می‌شود که تمام کتابخانه‌ها داخل آن قرار می‌گیرند. هرگز پوشه vendor را در Git commit نکنید. به جای آن فایل‌های composer.json و composer.lock را commit کنید.

فایل composer.lock و کار تیمی

composer.lock نسخه دقیق هر پکیج نصب‌شده (به همراه hash) را ثبت می‌کند. این فایل تضمین می‌کند که همه اعضای تیم و سرورهای مختلف همان ترکیب وابستگی‌ها را دریافت کنند.

قانون مهم:

  • مدیر پروژه یا توسعه‌دهنده مسئول composer update (یا composer require) را اجرا می‌کند، تغییرات را تست می‌کند و composer.lock را commit می‌کند.
  • بقیه اعضای تیم فقط composer install را اجرا می‌کنند.

در محیط واقعی همیشه از این دستور استفاده کنید:

استفاده از کتابخانه‌ها در کد

کافی است یک بار فایل autoload را include کنید:

نکات پیشرفته و روش‌های اصولی استفاده

  1. محدودیت نسخه
    هنگام تعریف نسخه برای بسته‌ها، می‌توانید به شکل زیر جزئیات ویرایش دلخواه را مشخص کنید
    ^1.2.3 - نسخه‌های سازگار با ۱.۲.۳ (تا قبل از ۲.۰.۰)
    ~1.2.3 - تا قبل از ۱.۳.۰
    1.2.* - هر نسخه ۱.۲.x توصیه می‌شود از ^ استفاده کنید مگر دلیل خاصی داشته باشید.
  1. جداسازی وابستگی‌های توسعه و واقعی
    پکیج‌های تست، تحلیل استاتیک و ابزارهای توسعه را در require-dev قرار دهید.
  2. امنیت
    به طور منظم composer audit را در CI/CD اجرا کنید. کامپوزر نسخه‌های جدید قابلیت‌های پیشرفته‌تری برای مسدود کردن پکیج‌های مخرب و آسیب‌پذیر دارد.
  3. بهینه‌سازی Autoloader در production

  1. اسکریپت‌های سفارشی
    می‌توانید در بخش scripts دستورات سفارشی تعریف کنید (مثلا composer test یا composer deploy).
  2. پکیج‌های خصوصی
    برای پکیج‌های داخلی شرکت می‌توانید از Private Packagist یا مخزن Git خصوصی استفاده کنید.

پرسش‌های متداول

۱- تفاوت اصلی composer install و composer update چیست؟

install نسخه‌های ثبت‌شده در composer.lock را نصب می‌کند و تغییری در آن نمی‌دهد. update محدودیت‌های composer.json را دوباره حل می‌کند، نسخه‌های جدیدتر را می‌گیرد و composer.lock را بازنویسی می‌کند. در محیط واقعی و برای اعضای تیم همیشه از install استفاده کنید.

۲- آیا باید پوشه vendor را در Git قرار دهم؟

خیر. فقط composer.json و composer.lock را commit کنید. پوشه vendor روی هر محیط با composer install ساخته می‌شود.

۳- چطور یک پکیج را به نسخه خاصی قفل کنم؟

در composer.json نسخه دقیق را بنویسید یا پس از composer require فایل lock را commit کنید. برای به‌روزرسانی کنترل‌شده از composer update vendor/package استفاده کنید.

۴- Composer audit چیست و چرا مهم است؟

دستوری است که پکیج‌های نصب‌شده را در برابر پایگاه‌داده آسیب‌پذیری‌های شناخته‌شده بررسی می‌کند. اجرای آن در pipelineهای CI بسیار توصیه می‌شود.

۵- اگر تعارض نسخه (conflict) رخ داد چه کنم؟

پیام خطا معمولاً دلیل را نشان می‌دهد. می‌توانید با composer why یا composer why-not علت وابستگی متقابل را پیدا کنید و محدودیت نسخه‌ها را تنظیم کنید.

۶- آیا می‌توانم از Composer در پروژه‌های قدیمی بدون فریم‌ورک استفاده کنم؟

بله. حتی در پروژه‌های تابعی ساده هم می‌توانید autoload و مدیریت کتابخانه‌ها را با Composer انجام دهید.

اطلاعات بیشتر در مورد کامپوزر

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

برای مشاهده‌ی آموزش دانلود و نصب کامپوزر، اینجا کلیک کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *