سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

CMS نویس مرجعی برای آموزش برنامه نویسی وب و PHP، توسعه افزونه‌های اختصاصی وردپرس، طراحی ورک‌فلو و اتوماسیون با n8n و توسعه CMS های اختصاصی است. هدف ما ارائه آموزش‌های کاربردی و راهکارهای حرفه‌ای برای توسعه‌دهندگان، کسب‌وکارها و علاقه‌مندان به دنیای برنامه‌نویسی است.

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
Composer چیست؟ آموزش Composer در PHP و مدیریت پکیج‌ها

Composer چیست؟ آموزش Composer در PHP و مدیریت پکیج‌ها

ممدیر کل سیستم ۱۸ شهریور ۱۴۰۵ ۲۰ دقیقه مطالعه ۱ بازدید
Composer چیست؟ آموزش Composer در PHP و مدیریت پکیج‌ها

اگر با PHP کار کرده باشید، احتمالاً با پروژه‌هایی مواجه شده‌اید که از کتابخانه‌ها و پکیج‌های مختلف استفاده می‌کنند. برای مثال ممکن است یک پروژه به یک کتابخانه برای کار با API، یک ابزار برای پردازش فایل، یک سیستم Logging یا چندین Dependency دیگر نیاز داشته باشد.

مدیریت دستی این Dependencyها در پروژه‌های بزرگ بسیار دشوار است.

اینجاست که Composer وارد می‌شود.

Composer ابزار استاندارد مدیریت Dependency در اکوسیستم PHP است که به برنامه‌نویس اجازه می‌دهد کتابخانه‌ها و پکیج‌های موردنیاز پروژه را تعریف، نصب، به‌روزرسانی و مدیریت کند.

Composer علاوه بر مدیریت Dependency، قابلیت بسیار مهم دیگری به نام Autoloading نیز در اختیار پروژه قرار می‌دهد.

در این مقاله بررسی می‌کنیم:

  • Composer چیست؟
  • چرا به Composer نیاز داریم؟
  • Composer در PHP چه کاربردی دارد؟
  • composer.json چیست؟
  • composer.lock چیست؟
  • Packagist چیست؟
  • تفاوت install و update چیست؟
  • require و require-dev چه تفاوتی دارند؟
  • Composer چگونه Autoload را مدیریت می‌کند؟
  • Composer چه ارتباطی با Namespace و PSR-4 دارد؟
  • و چطور باید از Composer در پروژه‌های PHP استفاده کنیم؟

# Composer چیست؟

Composer یک Dependency Manager برای PHP است.

به زبان ساده، Composer ابزاری است که به شما کمک می‌کند کتابخانه‌ها و پکیج‌های موردنیاز پروژه PHP خود را مدیریت کنید.

فرض کنید پروژه شما به یک Package با نام فرضی:


vendor/package

نیاز دارد.

به جای اینکه فایل‌های آن Package را به صورت دستی دانلود کنید، Composer می‌تواند Dependency را دریافت و نصب کند.

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


composer require vendor/package

Composer Dependency موردنظر و Dependencyهای موردنیاز آن را بررسی کرده و آنها را در پروژه نصب می‌کند.


# چرا به Composer نیاز داریم؟

فرض کنید یک پروژه PHP بزرگ دارید و از ۱۰ کتابخانه مختلف استفاده می‌کنید.

بدون یک Dependency Manager باید:

  1. کتابخانه‌ها را جداگانه دانلود کنید.
  2. نسخه مناسب آنها را پیدا کنید.
  3. Dependencyهای هر کتابخانه را بررسی کنید.
  4. فایل‌های موردنیاز را در پروژه قرار دهید.
  5. هنگام آپدیت کتابخانه‌ها، نسخه‌ها را مدیریت کنید.
  6. مطمئن شوید Packageهای مختلف با یکدیگر سازگار هستند.

این فرآیند بسیار زمان‌بر و مستعد خطاست.

Composer این کارها را تا حد زیادی خودکار می‌کند.


# Composer چه کاری انجام می‌دهد؟

مهم‌ترین قابلیت‌های Composer عبارت‌اند از:

  • نصب Packageهای PHP
  • مدیریت Dependencyها
  • مدیریت نسخه Packageها
  • بررسی سازگاری Dependencyها
  • نصب Dependencyهای غیرمستقیم
  • به‌روزرسانی Packageها
  • ایجاد Autoloader
  • مدیریت Dependencyهای Development
  • اجرای Scriptهای پروژه
  • استفاده از Packageهای موجود در اکوسیستم PHP

# Package در PHP چیست؟

قبل از اینکه Composer را بهتر درک کنیم، باید بدانیم Package چیست.

Package مجموعه‌ای از کدهای قابل استفاده مجدد است که می‌تواند قابلیت مشخصی را به پروژه اضافه کند.

برای مثال یک Package می‌تواند برای:

  • ارسال ایمیل
  • کار با API
  • پردازش تصویر
  • تولید PDF
  • Logging
  • احراز هویت
  • اتصال به سرویس‌های خارجی
  • کار با Database
  • تست نرم‌افزار

استفاده شود.

به جای اینکه همه این قابلیت‌ها را از صفر بنویسیم، می‌توانیم از Packageهای آماده استفاده کنیم.


# Dependency چیست؟

Dependency به کدی گفته می‌شود که پروژه شما برای انجام بخشی از عملکرد خود به آن نیاز دارد.

مثلاً اگر پروژه شما از یک کتابخانه PDF استفاده کند، آن کتابخانه یک Dependency برای پروژه شما محسوب می‌شود.

ممکن است خود آن Package نیز به Package دیگری نیاز داشته باشد.

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


Project

   │

   ├── Package A

   │      ├── Package C

   │      └── Package D

   │

   └── Package B

          └── Package E

Composer این Dependencyها را مدیریت می‌کند.


# Composer چگونه Dependencyها را مدیریت می‌کند؟

فرض کنید در پروژه خود دستور زیر را اجرا می‌کنید:


composer require monolog/monolog

Composer بررسی می‌کند:

  • Package موردنظر چیست؟
  • چه نسخه‌هایی از آن وجود دارد؟
  • پروژه شما با کدام نسخه سازگار است؟
  • Package به چه Dependencyهایی نیاز دارد؟
  • Dependencyهای آن چه نسخه‌هایی لازم دارند؟

سپس مجموعه مناسب Dependencyها را نصب می‌کند.


# Packagist چیست؟

Packagist یکی از مهم‌ترین منابع Packageهای PHP است و مخزن اصلی Composer برای Packageهای عمومی PHP محسوب می‌شود.

وقتی دستوری مانند:


composer require monolog/monolog

اجرا می‌کنید، Composer اطلاعات Package را از Repository مربوطه دریافت می‌کند.

نام Package معمولاً به شکل زیر نوشته می‌شود:


vendor/package

مثلاً:


monolog/monolog


# ساختار نام Package در Composer

Packageها معمولاً دارای دو بخش هستند:


vendor/package

مثلاً:


guzzlehttp/guzzle

در اینجا:


guzzlehttp

Vendor و:


guzzle

نام Package است.

این ساختار باعث می‌شود Packageها نام مشخص و قابل شناسایی داشته باشند.


# composer.json چیست؟

یکی از مهم‌ترین فایل‌های Composer:


composer.json

است.

این فایل اطلاعات مربوط به پروژه و Dependencyهای آن را نگهداری می‌کند.

یک نمونه ساده:


{

    "require": {

        "monolog/monolog": "^3.0"

    }

}

در این مثال پروژه به Package زیر نیاز دارد:


monolog/monolog

با یک Constraint نسخه مشخص.


# ساخت composer.json

می‌توانیم Composer را در یک پروژه PHP با دستور:


composer init

راه‌اندازی کنیم.

Composer از شما اطلاعات مختلفی درباره پروژه می‌پرسد و در نهایت یک composer.json ایجاد می‌کند.

البته در بسیاری از پروژه‌ها این فایل از قبل وجود دارد.


# ساختار composer.json

یک composer.json می‌تواند بخش‌های مختلفی داشته باشد.

مثلاً:


{

    "name": "example/project",

    "description": "Example PHP project",

    "require": {

        "monolog/monolog": "^3.0"

    },

    "require-dev": {

        "phpunit/phpunit": "^11.0"

    }

}

مهم‌ترین بخش‌هایی که در پروژه‌های معمول مشاهده می‌کنید:


name

description

require

require-dev

autoload

autoload-dev

scripts

config

هستند.


# require در Composer چیست؟

بخش:


{

    "require": {}

}

برای Dependencyهایی استفاده می‌شود که پروژه در اجرای اصلی خود به آنها نیاز دارد.

مثلاً:


{

    "require": {

        "monolog/monolog": "^3.0"

    }

}

یعنی Monolog یک Dependency اصلی پروژه است.


# require-dev چیست؟

Dependencyهایی که فقط در محیط Development یا Testing استفاده می‌شوند معمولاً در:


{

    "require-dev": {}

}

قرار می‌گیرند.

مثلاً:


{

    "require-dev": {

        "phpunit/phpunit": "^11.0"

    }

}

اگر پروژه را برای Production آماده می‌کنید، معمولاً می‌توانید Dependencyهای Development را نصب نکنید.

مثلاً:


composer install --no-dev


# تفاوت require و require-dev

به طور خلاصه:

بخشکاربرد
requireDependencyهای موردنیاز Runtime
require-devابزارهای Development و Testing

مثلاً:


Laravel

Redis Client

HTTP Client

ممکن است در require باشند.

اما:


PHPUnit

PHPStan

Pest

معمولاً در require-dev قرار می‌گیرند.


# نسخه Package در Composer

Composer امکان تعریف Constraint برای نسخه Package را فراهم می‌کند.

مثلاً:


{

    "require": {

        "vendor/package": "^2.0"

    }

}

این Constraint مشخص می‌کند چه نسخه‌هایی می‌توانند مورد قبول Composer باشند.

یکی از قابلیت‌های مهم Composer همین مدیریت نسخه Dependencyهاست.


# علامت ^ در Composer چیست؟

مثلاً:


^2.0

یک Version Constraint است که به Composer اجازه می‌دهد در محدوده سازگار مشخصی نسخه Package را انتخاب کند.

در Semantic Versioning، مفهوم دقیق Constraintها به ساختار نسخه و قوانین Composer بستگی دارد.

به همین دلیل بهتر است هنگام تعریف Dependency، تفاوت بین:


^

~

>=

>

<

=

و ترکیب Constraintها را به خوبی بشناسید.


# composer.lock چیست؟

در کنار:


composer.json

ممکن است فایل مهم دیگری داشته باشیم:


composer.lock

این فایل نسخه دقیق Dependencyهایی را که Composer برای پروژه انتخاب کرده، ثبت می‌کند.

این موضوع برای ایجاد محیط‌های یکسان در تیم و Deployment بسیار مهم است.


# چرا composer.lock مهم است؟

فرض کنید شما امروز Dependencyهای پروژه را نصب کرده‌اید.

Composer بر اساس Constraintهای composer.json نسخه‌هایی را انتخاب می‌کند و آنها را در composer.lock ثبت می‌کند.

حالا اگر پروژه را روی Server دیگری نصب کنید:


composer install

Composer می‌تواند از نسخه‌های ثبت‌شده در Lock File استفاده کند.

در نتیجه احتمال تفاوت نسخه Dependencyها بین محیط Development و Production کاهش پیدا می‌کند.


# تفاوت composer.json و composer.lock

به زبان ساده:

composer.json

می‌گوید:

> پروژه من به چه Dependencyهایی و با چه Constraintهایی نیاز دارد؟

composer.lock

می‌گوید:

> در حال حاضر دقیقاً چه نسخه‌هایی برای این Dependencyها انتخاب و Lock شده‌اند؟

این تفاوت یکی از مهم‌ترین مفاهیم Composer است.


# composer install چیست؟

دستور:


composer install

برای نصب Dependencyهای پروژه استفاده می‌شود.

اگر composer.lock وجود داشته باشد، Composer از نسخه‌های ثبت‌شده در آن استفاده می‌کند.

این دستور معمولاً در فرآیند Deployment بسیار مهم است.

مثلاً:


composer install --no-dev --optimize-autoloader

می‌تواند برای نصب Dependencyهای Production استفاده شود.


# composer update چیست؟

دستور:


composer update

برای به‌روزرسانی Dependencyها بر اساس Constraintهای موجود در composer.json استفاده می‌شود.

این دستور می‌تواند composer.lock را نیز تغییر دهد.

به همین دلیل نباید بدون دلیل روی Production از:


composer update

استفاده کرد.

معمولاً بهتر است Dependencyها را در محیط Development به‌روزرسانی و Lock File جدید را همراه پروژه Deploy کنیم.


# تفاوت composer install و composer update

دستورکاربرد
composer installنصب نسخه‌های مشخص‌شده در Lock File
composer updateپیدا کردن نسخه‌های جدید مطابق Constraintها و به‌روزرسانی Lock File

این تفاوت در پروژه‌های تیمی و Production بسیار مهم است.


# دستور composer require

برای اضافه کردن یک Package جدید می‌توان از:


composer require vendor/package

استفاده کرد.

مثلاً:


composer require monolog/monolog

Composer:

  1. Package را پیدا می‌کند.
  2. Dependencyهای آن را بررسی می‌کند.
  3. آن را نصب می‌کند.
  4. composer.json را به‌روزرسانی می‌کند.
  5. composer.lock را به‌روزرسانی می‌کند.
  6. Autoload را نیز به‌روزرسانی می‌کند.

# حذف Package با Composer

برای حذف Dependency:


composer remove vendor/package

استفاده می‌شود.

Composer Package را از Dependencyهای پروژه حذف می‌کند و فایل‌های مربوط به Dependency Management را نیز به‌روزرسانی می‌کند.


# پوشه vendor چیست؟

بعد از اجرای Composer معمولاً پوشه‌ای به نام:


vendor/

ایجاد می‌شود.

این پوشه محل قرارگیری Dependencyهای نصب‌شده پروژه است.

مثلاً:


project/

├── app/

├── public/

├── vendor/

├── composer.json

└── composer.lock


# آیا باید پوشه vendor را داخل Git قرار دهیم؟

در اکثر پروژه‌های PHP که از Composer استفاده می‌کنند، معمولاً vendor/ را در Git Commit نمی‌کنند.

به جای آن:


composer.json

composer.lock

در Repository قرار می‌گیرند.

سپس در Server یا محیط جدید اجرا می‌شود:


composer install

و پوشه vendor دوباره ساخته می‌شود.

البته سیاست دقیق ممکن است بر اساس نوع پروژه و Deployment متفاوت باشد.


# Composer Autoload چیست؟

یکی از مهم‌ترین قابلیت‌های Composer، ایجاد Autoloader است.

بعد از نصب Dependencyها، معمولاً فایلی مانند:


vendor/autoload.php

وجود دارد.

در Application می‌توانیم آن را Load کنیم:


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

بعد از آن Composer می‌تواند کلاس‌های تعریف‌شده در Autoload Configuration را به صورت خودکار Load کند.


# چرا Autoload مهم است؟

بدون Autoload ممکن است مجبور شویم برای هر کلاس:


require 'User.php';

require 'Product.php';

require 'Order.php';

بنویسیم.

در پروژه‌های بزرگ این روش بسیار نامناسب است.

Composer Autoload این فرآیند را خودکار می‌کند.


# Composer و Namespace

Composer ارتباط بسیار مهمی با Namespace دارد.

مثلاً فرض کنید:


App\Models\User

کلاس ما باشد.

در composer.json می‌توانیم Mapping زیر را داشته باشیم:


{

    "autoload": {

        "psr-4": {

            "App\\": "app/"

        }

    }

}

در این حالت Namespace:


App\

به Directory:


app/

Mapping می‌شود.


# PSR-4 چیست؟

PSR-4 استانداردی برای Autoloading کلاس‌ها در PHP است.

فرض کنید:


App\Models\User

داریم.

و Mapping:


App\ -> app/

تعریف شده است.

Composer می‌تواند بر اساس این Mapping کلاس را در:


app/Models/User.php

پیدا کند.

این قابلیت باعث شده ساختار Namespace و فایل‌ها در پروژه‌های مدرن PHP بسیار منظم‌تر شود.


# composer dump-autoload چیست؟

گاهی اوقات تنظیمات Autoload را تغییر می‌دهیم و لازم است Autoloader دوباره تولید شود.

برای این کار:


composer dump-autoload

را اجرا می‌کنیم.

مثلاً اگر در composer.json چنین بخشی اضافه کرده باشیم:


{

    "autoload": {

        "psr-4": {

            "App\\": "app/"

        }

    }

}

می‌توانیم اجرا کنیم:


composer dump-autoload

تا Autoload اطلاعات جدید را در نظر بگیرد.


# Autoload با Composer چگونه کار می‌کند؟

به شکل ساده:


composer.json

       ↓

Autoload Configuration

       ↓

composer dump-autoload

       ↓

vendor/autoload.php

       ↓

Application

       ↓

Class Loading

البته در پشت صحنه Composer چندین فایل و Mapping مختلف تولید می‌کند.


# Composer و Git

در پروژه‌های تیمی معمولاً این فایل‌ها مهم هستند:


composer.json

composer.lock

بهتر است تغییرات آنها تحت Version Control قرار بگیرد.

مثلاً:


git add composer.json composer.lock

git commit -m "Update PHP dependencies"

اما معمولاً:


vendor/

در .gitignore قرار داده می‌شود.


# Composer در پروژه Laravel

اگر با Laravel کار کرده باشید، Composer برای شما کاملاً ضروری است.

Laravel خودش مجموعه‌ای از Dependencyها را در composer.json تعریف می‌کند.

مثلاً:


{

    "require": {

        "laravel/framework": "...",

        "laravel/sanctum": "..."

    }

}

وقتی یک پروژه Laravel را Clone می‌کنید، معمولاً باید Dependencyهای آن را نصب کنید:


composer install

سپس Application می‌تواند از Packageهای موردنیاز استفاده کند.


# اضافه کردن Package به Laravel

فرض کنید بخواهیم یک Package به پروژه Laravel اضافه کنیم.

به جای دانلود دستی فایل‌ها:


composer require vendor/package

را اجرا می‌کنیم.

Composer Package را نصب و Dependencyهای آن را مدیریت می‌کند.

بسته به Package ممکن است مراحل دیگری مانند Publish Configuration، Migration یا تنظیم Service Provider نیز لازم باشد.


# Composer در پروژه‌های API

Composer فقط مخصوص Laravel نیست.

اگر یک REST API با PHP خام یا Framework دیگری بنویسید نیز می‌توانید از Composer استفاده کنید.

مثلاً:


PHP API

 ├── HTTP Client

 ├── Logger

 ├── Database Library

 └── Testing Framework

تمام این Dependencyها می‌توانند توسط Composer مدیریت شوند.


# Composer و نسخه PHP

Dependencyها ممکن است به نسخه خاصی از PHP نیاز داشته باشند.

مثلاً یک Package ممکن است اعلام کند که به نسخه‌ای از PHP با حداقل نسخه مشخص نیاز دارد.

Composer می‌تواند این محدودیت‌ها را در هنگام Dependency Resolution بررسی کند.

بنابراین نسخه PHP محیط Development و Production باید با نیازمندی‌های پروژه سازگار باشد.


# بررسی Dependencyهای پروژه

Composer ابزارهای مختلفی برای بررسی Dependencyها دارد.

یکی از دستورات کاربردی:


composer show

است.

این دستور اطلاعات Packageهای نصب‌شده را نمایش می‌دهد.

برای بررسی Dependencyهای یک Package نیز می‌توان از دستورات مرتبط Composer استفاده کرد.


# بررسی مشکلات Dependency

یکی از دستورات مهم:


composer why

است.

مثلاً می‌توان بررسی کرد یک Package چرا در پروژه نصب شده است.

همچنین:


composer why-not

می‌تواند برای بررسی اینکه چرا یک نسخه خاص قابل نصب نیست مفید باشد.

این دستورات هنگام حل Conflictهای Composer بسیار کاربردی هستند.


# Composer و Dependency Conflict

یکی از مشکلات رایج در پروژه‌های PHP، Conflict بین نسخه Packageها است.

مثلاً:


Package A

requires Library X ^2.0



Package B

requires Library X ^3.0

ممکن است Composer نتواند مجموعه‌ای از نسخه‌ها را پیدا کند که هر دو شرط را برآورده کنند.

در چنین شرایطی باید Constraintهای Dependencyها و نسخه‌های قابل نصب بررسی شوند.


# چرا Composer Update گاهی خطا می‌دهد؟

ممکن است composer update به دلیل مواردی مانند:

  • ناسازگاری نسخه PHP
  • Conflict بین Packageها
  • حذف شدن یک نسخه
  • Constraintهای ناسازگار
  • Dependencyهای قدیمی
  • محدودیت‌های Platform

با خطا مواجه شود.

یکی از نکات مهم این است که نباید صرفاً با حذف composer.lock یا تغییر تصادفی Versionها مشکل را حل کرد.

ابتدا باید علت Conflict مشخص شود.


# Composer و Production

در Production معمولاً هدف این است که دقیقاً Dependencyهایی نصب شوند که قبلاً تست شده‌اند.

به همین دلیل وجود:


composer.lock

اهمیت زیادی دارد.

یک فرآیند معمول Deployment می‌تواند شامل:


git pull

composer install --no-dev --optimize-autoloader

باشد.

البته دستورات دقیق Deployment باید بر اساس معماری پروژه و Server تنظیم شوند.


# Composer در پروژه‌های بزرگ

در پروژه‌های Enterprise ممکن است ده‌ها یا حتی صدها Dependency وجود داشته باشد.

Composer در چنین پروژه‌هایی کمک می‌کند:


Application

      ↓

composer.json

      ↓

Dependency Resolution

      ↓

composer.lock

      ↓

vendor/

      ↓

Autoload

به شکل منظم مدیریت شود.


# آیا Composer فقط Package نصب می‌کند؟

خیر.

Composer علاوه بر نصب Dependency می‌تواند برای موارد مختلفی استفاده شود:

  • Autoloading
  • اجرای Script
  • مدیریت نسخه Dependency
  • تعریف Repository
  • کنترل Platform Requirements
  • مدیریت Dependencyهای Development
  • اجرای ابزارهای پروژه

بنابراین Composer صرفاً یک ابزار دانلود Package نیست.


# تفاوت Composer با npm

اگر با JavaScript کار کرده باشید احتمالاً با npm آشنا هستید.

از نظر مفهوم کلی می‌توان مقایسه کرد:

PHPJavaScript
Composernpm
Packagistnpm Registry
composer.jsonpackage.json
vendor/node_modules/
composer.lockpackage-lock.json

البته این ابزارها دقیقاً یکسان نیستند و هرکدام رفتار و اکوسیستم مخصوص خود را دارند.


# تفاوت Composer با Git

Composer و Git دو ابزار کاملاً متفاوت هستند.

Git

برای Version Control و مدیریت تاریخچه کد استفاده می‌شود.

Composer

برای Dependency Management و Autoloading در پروژه PHP استفاده می‌شود.

این دو ابزار معمولاً در کنار یکدیگر استفاده می‌شوند.


# بهترین روش استفاده از Composer

برای پروژه‌های حرفه‌ای PHP چند نکته را رعایت کنید:

۱. composer.json را مدیریت کنید

Dependencyهای پروژه باید شفاف و قابل بررسی باشند.

۲. composer.lock را جدی بگیرید

به‌خصوص برای Applicationهایی که Deployment قابل تکرار نیاز دارند.

۳. vendor را معمولاً Commit نکنید

Dependencyها را در محیط مقصد با Composer نصب کنید.

۴. در Production از install استفاده کنید

در اغلب فرآیندهای Deployment، استفاده از:


composer install

به جای:


composer update

انتخاب مناسب‌تری است.

۵. Dependencyهای Development را جدا کنید

ابزارهای Testing و Development را در:


require-dev

قرار دهید.

۶. Packageهای بدون نگهداری را بررسی کنید

قبل از اضافه کردن یک Dependency، وضعیت نگهداری، سازگاری و کیفیت آن را بررسی کنید.

۷. Dependencyها را بی‌دلیل به‌روزرسانی نکنید

هر Update می‌تواند تغییرات یا ناسازگاری‌هایی ایجاد کند.


# ساختار پیشنهادی یک پروژه PHP با Composer

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


my-project/

│

├── src/

│   ├── Models/

│   ├── Services/

│   └── Repositories/

│

├── tests/

│

├── public/

│

├── vendor/

│

├── composer.json

├── composer.lock

└── .gitignore

و در composer.json:


{

    "autoload": {

        "psr-4": {

            "App\\": "src/"

        }

    },

    "require": {

        "monolog/monolog": "^3.0"

    },

    "require-dev": {

        "phpunit/phpunit": "^11.0"

    }

}

بعد:


composer install

و:


composer dump-autoload


# Composer و معماری حرفه‌ای PHP

Composer یکی از پایه‌های اکوسیستم مدرن PHP است.

وقتی مفاهیمی مانند:


Namespace

PSR-4

Autoload

Dependency Injection

SOLID

Design Patterns

را در کنار Composer یاد می‌گیرید، می‌توانید Applicationهایی با ساختار بسیار حرفه‌ای‌تر ایجاد کنید.

به همین دلیل یادگیری Composer صرفاً برای نصب Package نیست؛ بلکه بخشی از مسیر تبدیل شدن به یک PHP Developer حرفه‌ای است.


# جمع‌بندی

Composer چیست؟

Composer یک Dependency Manager قدرتمند برای PHP است که برای مدیریت کتابخانه‌ها و Packageهای پروژه استفاده می‌شود.

با Composer می‌توانیم:

  • Package نصب کنیم.
  • Package حذف کنیم.
  • Dependencyها را مدیریت کنیم.
  • نسخه Packageها را کنترل کنیم.
  • Dependencyهای Development را جدا کنیم.
  • Autoload ایجاد کنیم.
  • Packageها را به‌روزرسانی کنیم.
  • Dependency Conflictها را بررسی کنیم.
  • پروژه را برای Deployment آماده کنیم.

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


composer.json

composer.lock

vendor/

vendor/autoload.php

Packagist

require

require-dev

install

update

require

remove

dump-autoload

PSR-4

اگر در حال یادگیری PHP حرفه‌ای هستید، بعد از شناخت Composer باید وارد مرحله عملی شوید و نحوه نصب Package، تعریف Dependency، مدیریت Version، کار با composer.json و ساخت Autoload را تمرین کنید.

در مقاله بعدی، آموزش Composer را به صورت عملی بررسی می‌کنیم و دستورات مهم Composer را مرحله‌به‌مرحله اجرا خواهیم کرد.


# سوالات متداول Composer

Composer چیست؟

Composer ابزار مدیریت Dependency در PHP است که برای نصب، حذف، به‌روزرسانی و مدیریت Packageهای PHP و همچنین Autoloading استفاده می‌شود.

آیا Composer برای PHP ضروری است؟

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

composer.json چیست؟

composer.json فایل اصلی تعریف مشخصات پروژه و Dependencyهای آن است.

composer.lock چیست؟

composer.lock نسخه دقیق Dependencyهای انتخاب‌شده برای پروژه را ثبت می‌کند تا نصب Dependencyها در محیط‌های مختلف قابل تکرارتر باشد.

Packagist چیست؟

Packagist مخزن اصلی و عمومی Packageهای PHP برای Composer است و تعداد زیادی از کتابخانه‌های PHP در آن منتشر می‌شوند.

تفاوت composer install و composer update چیست؟

composer install برای نصب Dependencyهای پروژه، معمولاً بر اساس composer.lock، استفاده می‌شود؛ در حالی که composer update Dependencyها را بر اساس Constraintهای composer.json مجدداً حل کرده و در صورت نیاز نسخه‌های جدید را انتخاب می‌کند.

دستور composer require چیست؟

برای اضافه کردن یک Package جدید به پروژه استفاده می‌شود:


composer require vendor/package

پوشه vendor در Composer چیست؟

پوشه vendor محل قرارگیری Dependencyهای نصب‌شده پروژه و فایل‌های Autoload مربوط به Composer است.

آیا vendor باید در Git قرار بگیرد؟

در اکثر پروژه‌های PHP معمولاً vendor/ در Git قرار نمی‌گیرد و Dependencyها با استفاده از composer install در محیط مقصد نصب می‌شوند.

Composer و Namespace چه ارتباطی دارند؟

Composer می‌تواند با استفاده از PSR-4 بین Namespace و مسیر فایل‌ها Mapping ایجاد کند و کلاس‌ها را به صورت خودکار Load کند.

آیا Laravel از Composer استفاده می‌کند؟

بله. Composer یکی از ابزارهای اصلی مدیریت Dependency در پروژه‌های Laravel است.

آیا Composer فقط برای Laravel است؟

خیر. Composer برای پروژه‌های PHP مستقل از Framework نیز قابل استفاده است.


# مقالات مرتبط

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

  • Namespace در PHP چیست؟
  • آموزش Composer
  • Autoload در PHP
  • OOP در PHP
  • Class و Object در PHP
  • Interface در PHP
  • Dependency Injection در PHP
  • SOLID در PHP
  • Design Pattern در PHP
  • REST API با PHP
  • ساخت API با PHP

همچنین از این مقاله حتماً یک لینک به Pillar اصلی «آموزش برنامه نویسی وب و PHP» قرار بده.

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

۲۴ دقیقه
ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

۲۲ دقیقه
ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

۲۲ دقیقه
مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

۲۲ دقیقه