کامپوزر در PHP چیست و چطور بسته‌ها را مدیریت می‌کند؟

کامپوزر در PHP چیست و چطور بسته‌ها را مدیریت می‌کند؟

Composer وابستگی‌های هر پروژهٔ PHP را در vendor مدیریت می‌کند؛ با composer.json بنویس، نسخه‌ها را قفل کن و به autoload بسپار، نه به require دستی پراکنده.

۵ دقیقه مطالعه۰ بازدید
اشتراک گذاری۰
فهرست مطالب
  1. ۱مدیریت وابستگی به سبک Composer
  2. ۲نصب یک بستهٔ نمونه
  3. ۳دو اشتباه رایج
  4. ۴قدم بعدی

در PHP خیلی زود به کد دیگران نیاز پیدا می‌کنید؛ مثلاً برای ایمیل، اعتبارسنجی یا درگاه پرداخت. قدیم zip دانلود می‌کردید و با require پیاپی لود می‌کردید؛ با رشد پروژه و وابستگی‌های تو در تو این کار شکننده می‌شود. Composer همین اصطکاک را حل می‌کند.

مدیریت وابستگی به سبک Composer

Composer مثل Apt سراسری نصب نمی‌کند؛ برای هر پروژه جداست. کتابخانه‌ها داخل پوشهٔ vendor همان پروژه می‌مانند. ایده از npm و Bundler آمده است:

  1. در composer.json می‌گویید به چه بسته‌هایی نیاز دارید.
  2. Composer نسخه‌های سازگار با PHP و بقیهٔ بسته‌ها را پیدا می‌کند.
  3. فایل‌ها داخل vendor می‌آیند.
  4. یک autoload می‌سازد تا کلاس‌ها را دستی include نکنید.

نسخه‌های جدید معمولاً حداقل PHP 7.2.5 می‌خواهند (شاخهٔ LTS قدیمی‌تر روی PHPهای پایین‌تر هم هست). unzip و Git به دانلود و همگام‌سازی کمک می‌کنند.

نصب یک بستهٔ نمونه

برای لاگ، monolog/monolog:

bashcomposer require monolog/monolog

composer.json، پوشهٔ vendor و composer.lock ساخته یا به‌روز می‌شوند:

json{
    "require": {
        "monolog/monolog": "^3.0"
    }
}

نمونه در index.php:

php<?php

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

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = new Logger('main_channel');
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::WARNING));
$log->warning('کاربر بدون رمز عبور معتبر وارد شد');

echo "عملیات لاگ با موفقیت انجام شد.";

با php index.php همان پیام چاپ می‌شود و app.log کنار پروژه ساخته می‌شود؛ پس مسیر کلاس‌های کتابخانه را دستی نمی‌نویسید.

دو اشتباه رایج

  1. کامیت کردن vendor در گیت حجم مخزن را بی‌خود بالا می‌برد. vendor/ را در .gitignore بگذارید؛ فقط composer.json و composer.lock را نگه دارید. بقیه با composer install همان نسخه‌ها را می‌گیرند.
  2. نادیده گرفتن composer.lock یعنی هر محیط نسخه‌ی خودش را می‌گیرد؛ قفل تضمین می‌کند همهٔ محیط‌ها همان ویرایش‌ها را بگیرند و تفاوت نسخه باعث کرش نشود.

قدم بعدی

اگر می‌خواهید PHP ماژولار، namespace و اکوسیستم را از پایه با تمرین زنده یاد بگیرید: پی‌اچ‌پی از صفر تا برنامه‌نویس.

نظرها

اولین نفری باشید که نظر می‌دهد
برای ثبت نظر وارد شوید

سؤالتان را بپرسید یا تجربه‌تان را بنویسید تا نویسنده‌ی مطلب پاسخ بدهد.

مطالب مرتبط

از همین دسته
تفاوت position relative و absolute در CSS

تفاوت position relative و absolute در CSS

relative جای عنصر را در جریان نگه می‌دارد؛ absolute از جریان خارج می‌شود و نسبت به والد موقعیت‌یافته تراز می‌گیرد — با نمونه کارت و badge.

۴ دقیقه
کامپوزر در PHP چیست؟ مدیریت وابستگی با Composer — دینا کد