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

چرا Composer ضروری است؟
- مدیریت آسان وابستگیها
دیگر نیازی به دانلود دستی کتابخانهها و کپی کردن آنها در پروژه نیست. - کنترل نسخه دقیق
با استفاده از Semantic Versioning میتوانید محدوده مجاز نسخهها را مشخص کنید. - هماهنگی تیم و محیطها
همه اعضای تیم و سرورهای production همان نسخههایی را دریافت میکنند که تست شدهاند. - امنیت و بهروزرسانی
امکان بررسی آسیبپذیریها با composer audit و بهروزرسانی کنترلشده وجود دارد. - Autoloading استاندارد
PSR-4 و Classmap به صورت خودکار مدیریت میشوند. - اکوسیستم گسترده
بیش از صدها هزار پکیج روی Packagist.org در دسترس است.
فریمورکهایی مثل Laravel بر پایه Composer ساخته شدهاند و دستورات artisan و نصب پکیجها از طریق آن انجام میشود.
نصب Composer
برای مشاهدهی راهنمای نصب کامپوزر با فایل نصب روی ویندوز اینجا کلیک کنید
روی سیستمهای مدرن Composer به صورت سراسری نصب میشود:
|
1 2 3 4 5 |
# روش رسمی و توصیهشده php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" sudo mv composer.phar /usr/local/bin/composer |
یا در بسیاری از توزیعهای لینوکس و macOS با مدیر بسته سیستم:
|
1 2 3 4 5 |
# Ubuntu/Debian sudo apt install composer # macOS با Homebrew brew install composer |
پس از نصب، دستور composer --version را اجرا کنید تا از صحت نصب مطمئن شوید. کامپوزر ۲ بسیار سریعتر و امنتر از نسخه ۱ است.
ساختار اصلی و نحوه کار
در ریشه پروژه یک فایل به نام composer.json ایجاد میکنید. این فایل هستهی پروژه است و وابستگیها، تنظیمات autoload و اسکریپتها را تعریف میکند.
یک نمونهی ساده از فایل composer.json
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "name": "mycompany/myproject", "description": "یک پروژه نمونه", "require": { "php": "^8.2", "monolog/monolog": "^3.0", "guzzlehttp/guzzle": "^7.8" }, "require-dev": { "phpunit/phpunit": "^11.0" }, "autoload": { "psr-4": { "App\\": "src/" } } } |
دستورات اصلی کامپوزر
| دستور | کاربرد |
|---|---|
| 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را اجرا میکنند.
در محیط واقعی همیشه از این دستور استفاده کنید:
|
1 |
composer install --no-dev --optimize-autoloader --no-interaction |
استفاده از کتابخانهها در کد
کافی است یک بار فایل autoload را include کنید:
|
1 2 3 4 5 6 7 8 |
require __DIR__ . '/vendor/autoload.php'; use Monolog\Logger; use Monolog\Handler\StreamHandler; $log = new Logger('name'); $log->pushHandler(new StreamHandler('app.log', Logger::WARNING)); $log->warning('این یک پیام تست است'); |
نکات پیشرفته و روشهای اصولی استفاده
- محدودیت نسخه
هنگام تعریف نسخه برای بستهها، میتوانید به شکل زیر جزئیات ویرایش دلخواه را مشخص کنید
^1.2.3- نسخههای سازگار با ۱.۲.۳ (تا قبل از ۲.۰.۰)
~1.2.3- تا قبل از ۱.۳.۰
1.2.*- هر نسخه ۱.۲.x توصیه میشود از ^ استفاده کنید مگر دلیل خاصی داشته باشید.
- جداسازی وابستگیهای توسعه و واقعی
پکیجهای تست، تحلیل استاتیک و ابزارهای توسعه را در require-dev قرار دهید. - امنیت
به طور منظم composer audit را در CI/CD اجرا کنید. کامپوزر نسخههای جدید قابلیتهای پیشرفتهتری برای مسدود کردن پکیجهای مخرب و آسیبپذیر دارد. - بهینهسازی Autoloader در production
|
1 |
composer install --no-dev --optimize-autoloader --classmap-authoritative |
- اسکریپتهای سفارشی
میتوانید در بخش scripts دستورات سفارشی تعریف کنید (مثلاcomposer testیاcomposer deploy). - پکیجهای خصوصی
برای پکیجهای داخلی شرکت میتوانید از 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 به وبسایت رسمی کامپوزر مراجعه کنید.
برای مشاهدهی آموزش دانلود و نصب کامپوزر، اینجا کلیک کنید.