ویژگی تصویر

نصب و مدیریت پکیج‌ها با Composer

  /  PHP   /  نصب و مدیریت پکیج ها با Composer
بنر تبلیغاتی الف
آموزش PHP

Composer ابزار مدیریت وابستگی‌های PHP است که نصب، بارگذاری خودکار (autoloading) و هماهنگ‌سازی نسخه‌ها را ساده می‌کند. در این مقاله به صورت عملی و کاربردی روش نصب Composer، ساختار فایل‌های پیکربندی، شیوه نصب و به‌روزرسانی پکیج‌ها، نکات بهینه‌سازی برای محیط تولید و راهکارهای مدیریت مخازن خصوصی را بررسی می‌کنیم.

چرا از Composer استفاده کنیم؟

Composer وابستگی‌ها را به صورت مشخص و قابل بازتولید مدیریت می‌کند. فایل composer.json نسخه‌ها و تنظیمات را تعریف می‌کند و composer.lock تضمین می‌کند همان نسخه‌ها روی تمام ماشین‌ها نصب شود. این رفتار برای توسعه تیمی و CI/CD حیاتی است.

نصب Composer

نصب Composer ساده است و معمولاً با یک اسکریپت PHP صورت می‌گیرد. همچنین می‌توان آن را به‌صورت سراسری (global) یا پروژه‌ای (local) نصب کرد.

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer

کد بالا Composer را دانلود و به صورت اجرایی در مسیر /usr/local/bin/composer قرار می‌دهد تا به‌صورت سراسری در دسترس باشد. در ویندوز معمولاً از نصاب یا نصب دستی composer.phar استفاده می‌شود.

ساختار composer.json و مفاهیم کلیدی

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

{
  "name": "myvendor/myproject",
  "description": "A sample project",
  "require": {
    "monolog/monolog": "^2.0"
  },
  "autoload": {
    "psr-4": {
      "MyApp\": "src/"
    }
  },
  "scripts": {
    "post-install-cmd": "MyApp\Installer::postInstall"
  }
}

در این مثال، بسته monolog با نسخهٔ سازگار ^2.0 نصب می‌شود، autoload از استاندارد PSR-4 استفاده می‌کند و یک اسکریپت پس از نصب فراخوانی می‌شود.

نصب و به‌روزرسانی پکیج‌ها

  • نصب اولیه: از composer install استفاده کنید—این دستور composer.lock را به‌عنوان مرجع می‌خواند.
  • افزودن پکیج جدید: composer require vendor/package
  • به‌روزرسانی: composer update پکیج‌ها را طبق قواعد composer.json به‌روز می‌کند و composer.lock را بازنویسی می‌کند.
composer require guzzlehttp/guzzle:^7.0
composer install
composer update guzzlehttp/guzzle

دستور require یک پکیج جدید اضافه می‌کند و نسخهٔ مورد نظر را در composer.json می‌نویسد و سپس نصب می‌نماید. composer install وابستگی‌ها را طبق lockfile نصب می‌کند و composer update نسخه‌ها را بروزرسانی و lockfile را بازسازی می‌کند.

autoload و PSR-4

Composer بر تولید autoloader قدرتمند استوار است که بارگذاری کلاس‌ها را بدون include دستی ممکن می‌کند. نمونهٔ پیاده‌سازی PSR-4 در composer.json را دیدیم. برای تولید autoload از دستور زیر استفاده کنید:

composer dump-autoload -o

گزینه -o یا –optimize-autoloader برای محیط تولید مناسب است زیرا مپ‌های کلاس را بهینه می‌کند و سرعت بارگذاری را افزایش می‌دهد.

گزینه‌ها و پرچم‌های مفید

کاماندتوضیح
composer install –no-dev –prefer-dist –optimize-autoloaderنصب برای تولید؛ بدون پکیج‌های dev، استفاده از توزیع‌ها و بهینه‌سازی autoloader
composer update –with-dependenciesبه‌روزرسانی پکیج و وابستگی‌های مرتبط
COMPOSER_MEMORY_LIMIT=-1 composer updateرفع خطای کمبود حافظه هنگام بروزرسانی
composer auditبررسی آسیب‌پذیری‌های شناخته‌شده در وابستگی‌ها

مدیریت پکیج‌های خصوصی و مخازن سفارشی

برای استفاده از مخازن خصوصی (مثل VCS، artifact یا مخازن Composer)، آن‌ها را در composer.json اضافه کنید یا از فایل auth.json برای نگهداری توکن‌ها استفاده کنید. مثال اضافه کردن مخزن VCS:

{
  "repositories": [
    {
      "type": "vcs",
      "url": "git@github.com:myorg/private-repo.git"
    }
  ],
  "require": {
    "myorg/private-repo": "dev-main"
  }
}

این تنظیم به Composer می‌گوید که هنگام نصب دنبال پکیج در مخزن خصوصی مشخص شده بگردد. برای نام‌نویسی و احراز هویت توکن‌ها بهتر است از auth.json در پوشهٔ کاربر استفاده شود تا اطلاعات حساس در مخزن پروژه قرار نگیرند.

اسکریپت‌ها و اتوماسیون

Composer از اسکریپت‌ها برای اجرای وظایف پس از نصب، به‌روزرسانی یا قبل از تست پشتیبانی می‌کند. نمونهٔ composer.json که اسکریپت تعریف می‌کند را در بالا دیدیم. اسکریپت‌ها امکان اجرای PHPUnit، پاکسازی کش، تولید فایل‌های مهاجرت و غیره را فراهم می‌سازند و در CI بسیار مفید هستند.

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

در خطوط استقرار اتوماتیک توصیه می‌شود از دستورات زیر استفاده کنید تا نصب سریع‌تر و قابل اطمینان‌تر باشد:

composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction --no-progress

این ترکیب پکیج‌های توسعه را نصب نمی‌کند، از بسته‌های فشرده استفاده می‌کند، autoloader را بهینه می‌نماید و اجرای بدون تعامل را تضمین می‌کند. همچنین استفاده از cache در runner های CI مثل GitLab CI یا GitHub Actions زمان نصب را به حداقل می‌رساند.

رفع خطاهای رایج و نکات امنیتی

  • خطای حافظه: با COMPOSER_MEMORY_LIMIT=-1 رفع می‌شود یا با افزایش memory_limit در php.ini.
  • تعارض نسخه‌ها: با بررسی نسخه‌ها در composer why و composer prohibits قابل تشخیص است.
  • امنیت: از composer audit برای شناسایی آسیب‌پذیری‌ها استفاده کنید و نسخه‌های پچ شده را سریع اعمال کنید.
  • در پروژه‌های تیمی، همیشه composer.lock را در کنترل نسخه نگه دارید.

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

  • برای کتابخانه‌ها، نسخه‌بندی SemVer و محدود کردن نسخه بر پایه ^ یا ~ منطقی اعمال کنید تا از بروزرسانی‌های ناخواسته جلوگیری شود.
  • از autoload classmap برای تعامل با کد قدیمی استفاده کنید؛ اما برای کد جدید PSR-4 مناسب‌تر و قابل نگهداری‌تر است.
  • پکیج‌های غیر ضروری را حذف کنید تا حمله سطح حمله کاهش یابد و حجم دپلوی کم شود.
  • در صورت نیاز به پرفورمنس بالا، composer install را با –classmap-authoritative اجرا کنید تا autoloader از فایل کلاس‌مپ تولید شده استفاده کند.

جمع‌بندی و بهترین روش‌ها

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

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: