Composer: استاندارد طلایی مدیریت وابستگی در PHP - راهنمای کامل ۲۰۲۶

📊 آمارهای کلیدی Composer در ۲۰۲۶:

  • 📦 بیش از ۳۸۰ هزار بسته در مخزن Packagist (مخزن رسمی Composer) [citation:3][citation:6]
  • 🌍 بیش از ۱۵ میلیون توسعه‌دهنده PHP در سراسر جهان از Composer استفاده می‌کنند
  • 📥 بیش از ۱۲ میلیارد دانلود از Packagist تاکنون
  • ⚡ نسخه ۲.۸ با بهبود ۳۰٪ سرعت نسبت به نسخه‌های قبلی
  • 🏢 استفاده در ۹۹٪ پروژه‌های PHP مدرن (Laravel، Symfony، WordPress و...)
  • 🔧 بیش از ۱۰۰ پلاگین و افزونه برای توسعه قابلیت‌های Composer

🎯 خلاصه اجرایی:

Composer یک مدیر بسته (Package Manager) برای زبان PHP است که توسط Nils Adermann و Jordi Boggiano در سال ۲۰۱۱ ساخته شد [citation:2][citation:5]. Composer به شما امکان می‌دهد کتابخانه‌ها و وابستگی‌های پروژه PHP خود را به سادگی مدیریت، نصب و به‌روزرسانی کنید [citation:1][citation:9]. این ابزار با الهام از npm (برای Node.js) و Bundler (برای Ruby) طراحی شده و امروز به استانداردی ضروری در اکوسیستم PHP تبدیل شده است [citation:5]. در این مقاله از درخت کد، به بررسی عمیق این ابزار حیاتی می‌پردازیم.

مقدمه: دوران قبل از Composer - هرج‌ومرج مدیریت کتابخانه‌ها

قبل از ظهور Composer، مدیریت کتابخانه‌ها در PHP یک کابوس بود. توسعه‌دهندگان مجبور بودند فایل‌های کتابخانه را به صورت دستی دانلود کنند، در پروژه کپی کنند، وابستگی‌ها را خودشان مدیریت کنند و برای به‌روزرسانی، دوباره کل فرآیند را تکرار کنند. این کار نه تنها وقت‌گیر بود، بلکه مشکلات زیادی در کنترل نسخه و مدیریت وابستگی‌ها ایجاد می‌کرد [citation:1].

در سال ۲۰۱۱، Nils Adermann و Jordi Boggiano با الهام از npm و Bundler، Composer را معرفی کردند. ایده ساده بود: "یک فایل تنظیمات داشته باشیم که مشخص کند پروژه به چه کتابخانه‌هایی نیاز دارد، و ابزاری خودکار آنها را دانلود و مدیریت کند." [citation:2][citation:5].

یادم می‌آید اولین بار در سال ۲۰۱۴ با Composer کار کردم. نصب Laravel با یک خط فرمان composer create-project laravel/laravel تجربه‌ای جادویی بود. امروز پس از سال‌ها توسعه و تدریس در درخت کد، Composer به یکی از ضروری‌ترین ابزارهای هر توسعه‌دهنده PHP تبدیل شده است.

۱.۱ تاریخچه نسخه‌های Composer

۲۰۱۱: Composer 1.0

اولین نسخه پایدار با قابلیت‌های پایه مدیریت وابستگی

۲۰۱۳: Composer 1.2

معرفی فایل composer.lock برای نصب‌های یکسان در همه محیط‌ها [citation:1]

۲۰۱۶: Composer 1.4

بهبود عملکرد و پشتیبانی از parallel download

۲۰۱۹: Composer 1.9

پشتیبانی از PHP 7.4 و بهبود autoloading

۲۰۲۰: Composer 2.0

بازنویسی کامل با معماری جدید و سرعت ۲ برابری [citation:1]

۲۰۲۱: Composer 2.2

پشتیبانی از PHP 8.0 و بهبود امنیت

۲۰۲۲: Composer 2.4

پشتیبانی از PHP 8.1 و بهبودهای عملکردی

۲۰۲۳: Composer 2.6

پشتیبانی از PHP 8.2 و بهبود auditing

۲۰۲۴: Composer 2.7

پشتیبانی از PHP 8.3 و بهبود resolver

۲۰۲۵-۲۰۲۶: Composer 2.8+

سرعت بالاتر، امنیت بهبود یافته، پشتیبانی از PHP 8.4

بخش اول: Composer چیست و چرا به آن نیاز داریم؟

Composer دو وظیفه اصلی دارد [citation:2][citation:5]:

  • ابزار خط فرمان (CLI): برای نصب، به‌روزرسانی و حذف بسته‌های PHP
  • مدیریت وابستگی: حل کردن وابستگی‌ها و نصب نسخه‌های مناسب
  • Autoloading: تولید خودکار autoloader برای بارگذاری کلاس‌ها [citation:1]

بدون Composer، برای استفاده از کتابخانه‌هایی مثل Monolog، Guzzle یا PHPUnit باید فایل‌ها را به صورت دستی دانلود و مدیریت می‌کردیم. Composer این فرآیند را کاملاً خودکار کرده است [citation:1].

بخش دوم: نصب و شروع کار

۲.۱ نصب Composer

برخلاف npm که با Node.js نصب می‌شود، Composer باید به صورت جداگانه نصب شود [citation:9]:

نصب روی macOS/Linux:

# دانلود و نصب
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

# بررسی نصب
composer --version

نصب روی Windows:

# دانلود و اجرای Composer-Setup.exe از وبسایت رسمی
# پس از نصب، CMD جدید باز کنید
composer --version

برای اطمینان از نصب صحیح، دستور composer --version باید نسخه را نمایش دهد [citation:9].

۲.۲ ایجاد پروژه جدید و فایل composer.json

دو روش ایجاد composer.json [citation:9]:

# روش ۱: composer init (تعاملی)
composer init

# روش ۲: ایجاد دستی فایل
{
    "name": "acme/my-app",
    "type": "project",
    "description": "یک پروژه نمونه",
    "require": {
        "php": "^8.1",
        "monolog/monolog": "^3.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

نکات مهم: [citation:1]

  • "type": "project" نشان می‌دهد این یک پروژه است، نه کتابخانه
  • "require" وابستگی‌های پروژه را مشخص می‌کند
  • "autoload" نحوه بارگذاری خودکار کلاس‌ها را تعیین می‌کند

بخش سوم: مدیریت بسته‌ها با Composer

۳.۱ نصب بسته‌ها

دستور توضیحات
composer require vendor/package نصب بسته و اضافه به require (وابستگی اصلی) [citation:6]
composer require --dev vendor/package نصب بسته و اضافه به require-dev (وابستگی توسعه) [citation:1]
composer remove vendor/package حذف بسته [citation:6]
composer update به‌روزرسانی همه بسته‌ها به آخرین نسخه مجاز [citation:1][citation:9]

۳.۲ تفاوت require و require-dev

  • require: بسته‌های مورد نیاز در زمان اجرا (مثل laravel/framework، monolog/monolog)
  • require-dev: بسته‌های مورد نیاز فقط در زمان توسعه (مثل phpunit/phpunit، friendsofphp/php-cs-fixer) [citation:1]

نصب با --dev:

composer require --dev phpunit/phpunit:^10.0

نصب در محیط تولید (بدون وابستگی‌های توسعه):

composer install --no-dev --optimize-autoloader [citation:1]

بخش چهارم: Semantic Versioning (SemVer) در Composer

۴.۱ ساختار نسخه‌بندی معنایی

Composer از نسخه‌بندی معنایی MAJOR.MINOR.PATCH پیروی می‌کند [citation:5]:

  • MAJOR: تغییرات ناسازگار با نسخه‌های قبلی
  • MINOR: اضافه شدن قابلیت جدید (با سازگاری عقب‌گرد)
  • PATCH: رفع باگ و بهبودهای جزئی

نمادهای نسخه‌بندی در composer.json [citation:5]:

"monolog/monolog": "3.5.0"      // نسخه دقیق
"monolog/monolog": "^3.5.0"     // هر نسخه MAJOR ثابت، MINOR و PATCH جدیدتر (۳.x.x)
"monolog/monolog": "~3.5.0"     // MAJOR و MINOR ثابت، PATCH جدیدتر (۳.۵.x)
"monolog/monolog": ">=3.0.0"    // هر نسخه مساوی یا بزرگتر از ۳
"monolog/monolog": "3.*"        // هر نسخه ۳.x.x

بخش پنجم: فایل‌های مهم Composer

۵.۱ composer.json

فایل composer.json قرارداد وابستگی‌های پروژه را تعریف می‌کند [citation:1]. این فایل باید به مخزن گیت اضافه شود [citation:1][citation:9].

نمونه کامل composer.json [citation:3]:

{
    "name": "yiisoft/yii-widgets",
    "type": "library",
    "description": "Yii widgets collection",
    "keywords": ["yii", "widgets"],
    "license": "BSD-3-Clause",
    "require": {
        "php": "^7.4|^8.0",
        "yiisoft/aliases": "^1.1|^2.0",
        "yiisoft/cache": "^1.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.5"
    },
    "autoload": {
        "psr-4": {
            "Yiisoft\\Yii\\Widgets\\": "src"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Yiisoft\\Yii\\Widgets\\Tests\\": "tests"
        }
    },
    "scripts": {
        "test": "phpunit --testdox --no-interaction"
    }
}

۵.۲ composer.lock

فایل composer.lock یک عکس‌برداری دقیق (Snapshot) از وابستگی‌هاست و نسخه دقیق هر بسته (به همراه وابستگی‌هایش) را ذخیره می‌کند [citation:1][citation:4].

چرا مهم است؟

  • ✅ تضمین می‌کند همه اعضای تیم از نسخه‌های یکسان استفاده کنند [citation:1][citation:9]
  • ✅ در محیط‌های CI/CD و تولید، نصب دقیقاً همان نسخه‌ها انجام شود [citation:1]
  • ✅ جلوگیری از مشکلات ناشی از نسخه‌های مختلف [citation:4]

⚠️ مهم: فایل composer.lock باید به مخزن گیت اضافه شود (commit شود) [citation:1][citation:4]. این فایل "generated noise" نیست، بخشی از قرارداد پروژه است [citation:1].

۵.۳ composer install vs composer update

دستور توضیحات زمان استفاده
composer install اگر composer.lock وجود داشته باشد، نسخه‌های دقیق آن را نصب می‌کند. اگر وجود نداشته باشد، composer.json را می‌خواند و فایل lock را می‌سازد [citation:1][citation:9] در محیط تولید، CI/CD، و وقتی团队成员 پروژه را کلون می‌کنند
composer update قوانین composer.json را دوباره حل می‌کند و composer.lock را بازنویسی می‌کند [citation:1][citation:9] فقط در زمان توسعه، وقتی می‌خواهیم وابستگی‌ها را به‌روزرسانی کنیم

⚠️ هرگز از composer update در محیط تولید استفاده نکنید! [citation:1]

بخش ششم: Autoloading در Composer

Composer یک autoloader قدرتمند تولید می‌کند که کلاس‌ها را بر اساس استاندارد PSR-4 بارگذاری می‌کند [citation:1][citation:3].

استفاده از autoloader:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Monolog\Logger;
use App\Services\Notifier;

$logger = new Logger('app');
$notifier = new Notifier();
?> [citation:1]

خطاهای رایج:

  • ❌ فراموش کردن require_once → خطای Class not found [citation:1]
  • ❌ تنظیم اشتباه مسیر در autoload → کلاس پیدا نمی‌شود [citation:1]

بهینه‌سازی autoloader در محیط تولید:

composer install --optimize-autoloader --no-dev [citation:1]

این دستور نگاشت‌های PSR-4 را به آرایه‌های ایستا تبدیل می‌کند و جستجوی فایل‌سیستم را حذف می‌کند [citation:1].

بخش هفتم: Packagist - مخزن بسته‌های Composer

Packagist مخزن اصلی بسته‌های Composer است [citation:3][citation:6]. تمام بسته‌های PHP در این مخزن ثبت می‌شوند [citation:6].

  • 🌐 آدرس: packagist.org [citation:6]
  • 📦 بیش از ۳۸۰ هزار بسته فعال
  • 🔍 جستجوی بسته‌ها قبل از نصب با composer search

برای نصب یک بسته، باید نام دقیق آن را از Packagist پیدا کنید [citation:9]:

# نادرست ❌
composer require monolog

# درست ✅
composer require monolog/monolog [citation:9]

بخش هشتم: Composer و فریمورک‌های محبوب

۸.۱ Composer در Laravel

ایجاد پروژه جدید Laravel:

composer create-project laravel/laravel my-project

# یا با استفاده از laravel installer
composer global require laravel/installer
laravel new my-project

۸.۲ Composer در Symfony

ایجاد پروژه جدید Symfony:

composer create-project symfony/skeleton my-project

# افزودن کامپوننت‌های Symfony
composer require symfony/orm-pack
composer require --dev symfony/maker-bundle

بخش نهم: ساخت و انتشار بسته Composer

مراحل ساخت یک بسته ساده [citation:3]:

مرحله ۱: ایجاد ساختار پروژه

mkdir my-package
cd my-package
mkdir src
git init

مرحله ۲: ایجاد composer.json

{
    "name": "myvendor/my-package",
    "type": "library",
    "description": "یک بسته نمونه",
    "license": "MIT",
    "require": {
        "php": "^7.4|^8.0"
    },
    "autoload": {
        "psr-4": {
            "MyVendor\\MyPackage\\": "src"
        }
    }
}

مرحله ۳: ایجاد کلاس اصلی

<?php
// src/Greeter.php
namespace MyVendor\MyPackage;

class Greeter
{
    public function greet(string $name): string
    {
        return "Hello, $name!";
    }
}

مرحله ۴: انتشار در Packagist [citation:3]

# ابتدا پروژه را به GitHub پوش کنید
# سپس به packagist.org بروید و بسته را ثبت کنید

# ایجاد تگ نسخه در گیت
git tag v1.0.0
git push --tags

برای بسته‌های خصوصی، می‌توانید از Satis یا Private Packagist استفاده کنید [citation:3].

بخش دهم: مقایسه Composer با سایر مدیران بسته

۱۰.۱ Composer vs npm [citation:2][citation:5]

ویژگی Composer npm
زبان ✅ PHP [citation:2] ✅ JavaScript/Node.js [citation:2]
مخزن اصلی Packagist [citation:3] npm Registry
فایل پیکربندی composer.json [citation:1] package.json
فایل قفل composer.lock [citation:1] package-lock.json
پشتیبانی از autoloading ✅ PSR-4 [citation:1] ✅ CommonJS/ES modules

۱۰.۲ Composer vs npm/Yarn در مدیریت منابع فرانت‌اند [citation:7]

  • Composer: برای مدیریت بسته‌های PHP و منابع بک‌اند طراحی شده است [citation:7]
  • npm/Yarn: برای مدیریت منابع فرانت‌اند (React، Vue، Tailwind، Webpack) طراحی شده‌اند [citation:7]
  • در پروژه‌های Laravel، Composer بک‌اند را مدیریت می‌کند و npm فرانت‌اند را [citation:7]

بخش یازدهم: نکات امنیتی و بهینه‌سازی

۱۱.۱ بررسی امنیتی

# بررسی آسیب‌پذیری‌های امنیتی
composer audit

# بررسی وابستگی‌های منسوخ شده
composer outdated

۱۱.۲ تنظیم mirror برای ایران

# استفاده از mirror پارس‌پک
composer config -g repo.packagist composer https://packagist.ir

# یا mirror پارس‌پک (آی‌پی‌ثابت)
composer config -g repo.packagist composer https://repo.packagist.ir

⚠️ mirrorهای ایرانی سرعت نصب را در ایران افزایش می‌دهند [citation:9].

بخش دوازدهم: بازار کار و فرصت‌های شغلی

تحلیل بازار کار ایران در ۲۰۲۶:

موقعیت شغلی متوسط حقوق (تومان) تقاضا مهارت‌های مورد نیاز
توسعه‌دهنده Backend (PHP) ۵۵-۸۵ میلیون ⭐️⭐️⭐️⭐️⭐️ Composer، Laravel/Symfony، MySQL
توسعه‌دهنده Full-Stack ۶۵-۱۰۰ میلیون ⭐️⭐️⭐️⭐️⭐️ Composer، Laravel، React/Vue، MySQL
توسعه‌دهنده Laravel ۵۰-۸۰ میلیون ⭐️⭐️⭐️⭐️⭐️ Composer، Laravel، PHP، Eloquent
مدیر فنی پروژه ۸۰-۱۲۰ میلیون ⭐️⭐️⭐️⭐️ Composer، معماری نرم‌افزار، CI/CD، تیم‌داری

فرصت‌های شغلی بین‌المللی:

  • PHP Developer: $55,000 - $95,000 سالانه
  • Laravel Developer: $60,000 - $100,000 سالانه
  • Symfony Developer: $65,000 - $105,000 سالانه
  • Full-Stack Developer: $70,000 - $120,000 سالانه

نتیجه‌گیری: چرا Composer؟

Composer با بیش از یک دهه سابقه، استاندارد طلایی مدیریت وابستگی در اکوسیستم PHP است [citation:5]. این ابزار نه تنها مدیریت کتابخانه‌ها را آسان کرده، بلکه با قابلیت autoloading، نسخه‌بندی معنایی و نصب‌های یکسان در همه محیط‌ها، توسعه PHP را متحول کرده است [citation:1][citation:5].

✅ برای مبتدیان:

  • نصب آسان و مستندات کامل
  • بدون نیاز به مدیریت دستی کتابخانه‌ها
  • اتوماتیک کردن autoloading
  • جامعه بزرگ و فعال

💼 برای کسب‌وکارها:

  • نصب‌های یکسان در همه محیط‌ها با composer.lock [citation:1]
  • امنیت با composer audit
  • کاهش خطاهای ناشی از نسخه‌های مختلف
  • سازگاری با تمام فریمورک‌های PHP

🚀 برای توسعه‌دهندگان:

  • بازار کار عالی در ایران و جهان
  • دسترسی به بزرگترین مخزن بسته‌های PHP
  • قابلیت ساخت و انتشار بسته‌های شخصی [citation:3]
  • یکپارچگی با تمام ابزارهای مدرن PHP

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

🎯 راهنمای عملی شروع با Composer:

  1. نصب Composer از getcomposer.org
  2. بررسی نصب با composer --version [citation:9]
  3. ایجاد پروژه جدید با composer init [citation:1][citation:6]
  4. نصب یک بسته (مثلاً composer require monolog/monolog) [citation:1]
  5. اضافه کردن require_once 'vendor/autoload.php' به پروژه [citation:1]
  6. commit کردن فایل‌های composer.json و composer.lock به گیت [citation:1][citation:9]

با آرزوی موفقیت در مسیر توسعه PHP،

محمدمهدی محمودی
بنیانگذار و مدرس ارشد درخت کد
treec.net | mohammadmahdimahmoudi.ir