- یکشنبه 10 دی 1396 ساعت 12:20
- 1.7.1
- در حال تکمیل
- فعال
این مطلب نصب کامپوزر و برخی از کاربردهای اصلی کامپوزر از جمله راه اندازی پروژه، نصب و آپدیت وابستگیها و بارگذاری خودکار پکیجها را پوشش میدهد. کامپوزر یک ابزار مدیریت وابستگی برای PHP است، منظور از مدیریت وابستگیها (Dependency Manager)، مدیریت نصب و آپدیت پکیجها، ماژولها، کتابخانهها و فایلهای مورد نیاز پروژه است. استفاده از کامپوزر علاوه بر اینکه از لحاظ زمان سرعت شما را بسیار بالا میبرد، به دلیل اینکه به صورت اتوماتیک فایلها و کلاسهای مرتبط را دانلود میکند، بروز خطاهای مربوط به پکیجها را نیز کاهش میدهد.
احتمالا پروژه شما دارای تعدادی کتابخانه است که هر کتابخانه به کتابخانههای دیگری وابسته است. کامپوزر شما را قادر میسازد تا کتابخانههایی که پروژه شما نیاز دارد را معرفی نمایید و کامپوزر کتابخانههای وابسته به آن را مییابد و نصب میکند.
پیش نیازها
مدیریت وابستگیها مفهوم جدیدی نیست و در واقع composer از ابزار NPM در Nodjs و bandler در Roby الهام گرفته شده است. کامپوزر برای اجرا به PHP 5.3.2 نیاز دارد. تنظیمات دیگری نیز وجود دارد که در زمان نصب به شما هشدار داده می شود.
نصب کامپوزر
به طور خلاصه دو راه برای نصب کامپوزر وجود دارد، به صورت محلی به عنوان بخشی از پروژه یا به صورت سراسری به عنوان سیستم اجرایی گسترده در کلیه پروژهها.
محلی
نصب کننده برخی از تنظیمات php را بررسی میکند و سپس فایل composer.phar را در دایرکتوری پروژه شما دانلود میکند.
اصطلاحات فنی
- سامانه مدیریت پکیج که به آن مدیر پکیج و مدیر بسته نیز میگویند مجموعهای از ابزارهایی است که پروسه نصب، آپدیت، پیکربندی و حذف برنامههای کامپیوتر را به صورت خودکار انجام میدهند. مدیر بسته معمولا شامل پایگاه دادهای حاوی نسخه بسته نرمافزاری و وابستگیهای آن است؛ این اطلاعات از تداخل بستهها با یکدیگر جلوگیری بعمل آورده و همهٔ پیش نیازهای نصب یک بسته نرمافزاری را فراهم میآورد.
- فرمت پکیج نوعی از آرشیو است که شامل برنامههای کامپیوتر و فرادادههای (metadata) اضافی مورد نیاز سامانههای مدیریت پکیج است.
- فایل PHAR، یک فرمت پکیج است که توزیع اپلیکیشنها و کتابخانهها را در یک فایل آرشیو PHP با بستهبندی تعدادی از فایلهای PHP و سایر منابع مانند عکسها، فایلهای stylesheet و ...، ممکن میسازد.
حالا برای اجرا php composer.phar
را در خط فرمان اجرا کنید. برای نصب کامپوزر به صورت محلی در یک دایرکتوری خاص از آپشن --install-dir
و همچنین از آپشن --filename
برای نامگذاری آن استفاده کنید.
php composer-setup.php --install-dir=bin --filename=composer
حالا کافیست php bin/composer
را اجرا کنید.
سراسری
فایل composer.phar را هر جایی که تمایل دارید قرار دهید، اگر آن را در یک دایرکتوری قرار دهید که بخشی از مسیر شما است، میتوانید به آن به صورت سراسری دسترسی داشته باشید.
php composer
از composer
استفاده کنید.با استفاده از فایل نصب
ابتدا کامپوزر را از سایت رسمی آن دانلود و اجرا کنید. در مرحله بعد مسیر نصب php را باید مشخص کنید. در مرحله سوم تنظیمات مربوط به پروکسی را خالی بگذارید. مرحله بعد با زدن دکمه Install کامپوزر نصب می شود. برای تست اینکه کامپوزر درست نصب شده، در CMD (با دکمه win + R و تایپ cmd) باید Composer را تایپ کنید و Enter را بزنید.
نصب کامپوزر در لینوکس
curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
راه اندازی پروژه
برای استفاده از کامپوزر در پروژه خود، به یک فایل با نام composer.json نیاز دارید. این فایل وابستگیهای پروژه شما را تعریف میکند و ممکن است شامل فرادادههای دیگری باشد.
کلید require
اولین (و اغلب تنها) چیزی که شما در فایل composer.json مشخص میکنید، کلید require
است. خیلی ساده به کامپوزر میگویید که پروژه شما به کدام پروژهها وابستگی دارد.
{
"require": {
"monolog/monolog": "1.0.*"
}
}
همانطور که میبینید، require
یک شی میگیرد که نام پکیج (مثلا monolog/monolog) و ورژن محدودیتهای آن (مثلا 1.0.*
) را مشخص میکند. کامپوزر از این اطلاعات برای جستجوی مجموعه مناسب از فایلها در پکیج repositories، که در Packagist (مخزن پکیج پیش فرض) یا با استفاده از کلید repositories ثبت میکنید، استفاده میکند. در مثال بالا، چون مخزن دیگری در composer.json ثبت نشده است، پکیج monolog/monolog را که در Packagist ثبت شده به آن اختصاص میدهد.
نامهای پکیج
نام پکیج شامل یک نام vendor و نام پروژه است. اغلب ممکن است همنام باشند، مثلا در لاراول laravel/laravel یعنی همنام هستند، ولی در نسخه 2 (advanced) فریمورک Yii به صورت yiisoft/yii2-app-advanced میباشد که نام vendor نام شرکت توسعهدهنده آن یعنی yiisoft و نام پروژه yii2-app-advanced است. دلیل استفاده از دو نام نیز جلوگیری از تداخل نامها است، چون ممکن است دو نفر بخواهند پروژه همنامی بسازند.
محدودیتهای ورژن پکیج
در مثال ما، ما برای پکیج Monolog، محدودیت ورژن 1.0.*
قرار دادهایم، یعنی هر ورژنی که در شاخه توسعه 1.0 و بالاتر و کمتر از 1.1 است.
نصب وابستگیها
برای نصب وابستگیها تعریف شده برای پروژه خود، تنها کافیست که install
را در خط فرمان اجرا کنید:
php composer.phar install
وقتی این دستور را اجرا میکنید، یکی از این دو ممکن است رخ دهد:
نصب بدون composer.lock
اگر این دستور را تا کنون اجرا نکرده باشید و همچنین فایل composer.lock
وجود نداشته باشد، کامپوزر تمام وابستگیها در فایل composer.json
را لیست میکند و آخرین ورژن از فایلهای آنها را دانلود میکند و در دایرکتوری vendor در پروژه شما قرار میدهد. (دایرکتوری vendor محلی مرسوم و قراردادی برای نگهداری تمام کدهای شخص ثالث در پروژه شما است). در مثل بالا فایلهای سورس Monolog در vendor/monolog/monolog/ قرار میگیرند. اگر Monolog وابستگیهای دیگری را لیست کند، آنها نیز در پوشه vendor قرار میگیرند.
vendor
را در .gitignore
خود قرار دهید، زیرا قطعا نمیخواهید تمام کدهای شخص ثالث را به مخزن نسخهگذاری خود اضافه کنید.پس از اتمام نصب و دانلود وابستگیها، کامپوزر دادههای مربوط به تمام پکیجها و ورژن دقیق آنها را در فایل composer.lock
ذخیره میکند، یعنی کامپوزر پروژه را روی آن ورژن خاص قفل میکند. در پروژههای تیمی شما باید فایل composer.lock
را به مخزن پروژهتان، commit کنید، تا سایر توسعهدهندگانی که روی آن پروژه کار میکنند، با همان ورژن از وابستگیها پروژه را اجرا کنند.
نصب با composer.lock
اگر وقتی شما composer install
را اجرا میکنید، علاوه بر فایل composer.json
، یک فایل composer.lock
نیز از قبل وجود داشته باشد، یعنی شما قبلا install
را اجرا کرده باشید یا فرد دیگری این دستور را در پروژه اجرا کرده باشد و فایل composer.lock
را به پروژه Commit کرده باشد. در هر دو حالت، اجرای دستور install
در حالی که فایل composer.lock
از قبل وجود دارد، تمام وابستگیهای لیست شده در composer.json
را نصب میکند، اما کامپوزر دقیقا ورژنهایی از وابستگیها را نصب میکند که در فایل composer.lock
لیست شدهاند تا مطمئن شود که همه توسعهدهندگانی که در حال کار روی پروژه هستند، از ورژنهای منطبق با هم برای پکیجها استفاده میکنند، این حالت نوعی قفلگذاری روی ورژنها میباشد. در نتیجه شما تمام وابستگیهای خواسته شده از composer.json را دارید، گرچه ممکن است آخرین ورژن نباشند، اما میتوانید مطمئن باشید که پروژه شما به خاطر تغییرات غیرمنتظره در وابستگیها به مشکل برنخواهد خورد.
کامیت فایل composer.lock
به سیستم کنترل نسخه
کامیت کردن این فایل به کنترل نسخه بسیار مهم است، زیرا باعث میشود تا تمامی توسعهدهندگانی که روی پروژه کار میکنند، دقیقا از ورژنهایی از وابستگیها استفاده کنند که شما استفاده میکنید. حتی اگر شما توسعهدهندهای هستید که به تنهایی روی توسعه پروژهای کار میکنید، پس از 6 ماه، وقتی پروژه را مجددا نصب کنید میتوانید مطمئن باشید که وابستگیهایی که نصب کرده بودید، هنوز به درستی کار میکنند، حتی اگر از آن زمان تا به حال ورژنهای زیادی انتشار یافته باشند.
آپدیت وابستگیها به آخرین ورژنها
همانطور که در بالا گفته شد، فایل composer.lock
از آپدیت خودکار وابستگیها جلوگیری میکند. برای آپدیت به آخرین ورژن، کامند update
را اجرا کنید. این دستور آخرین ورژن دارای تطبیق را (مطابق با فایل composer.json
) میگیرد و فایل composer.lock
را با ورژنهای جدید بازنویسی میکند. (این عمل معادل حذف فایل composer.lock
و اجرای دوباره کامند install
است.)
php composer.phar update
instal
را اجرا میکنید، فایلهای composer.lock
و composer.json
از نظر زمانی با هم منطبق نباشند، یک خطا از نوع Warning نمایش داده میشود.اگر میخواهید یک وابستگی را نصب یا آپدیت کنید، میبایست آن را در لیست سفید قرار دهید:
php composer.phar update monolog/monolog [...]
Packagist
مخزن (repository) اصلی کامپوزر Packagist است. مخزن کامپوزر اساسا یک منبع پکیج است، یعنی جایی که شما میتوانید پکیجها را از آنجا دریافت کنید. توصیه میشود که هر پروژه متن بازی (Open source) با استفاده از کامپوزر، پکیجهای خود را در Packagist منتشر کند.
بارگذاری خودکار
یکی دیگر از قابلیتهای کامپوزر مدیریت لود کلاسها است، بدین معنی که تنها زمانی کلاسی را لود میکند که آن کلاس فراخوانی شود. وقتی که پکیجهای مختلفی داریم، نیاز به بارگذاری خودکار آنها نیز داریم. کامپوزر برای کتابخانههایی که اطلاعات بارگذاری خودکار را مشخص میکنند، یک فایل autoload.php در پوشه vendor تولید میکند، که این فایل قادر است تا تمامی فایلها را به صورت خودکار در پروژه بارگذاری کند. شما به سادگی میتوانید این فایل را include کرده و بدون هیچ کار اضافه دیگری، استفاده از کلاسهایی که آن کتابخانهها ارائه میدهند را شروع کنید.
require __DIR__ . '/vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
حتی شما میتوانید کد خودتان را با افزودن یک فیلد autoload به composer.json به Autoloader اضافه کنید.
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
vendor/composer/autoload_*.php
را include کنید که آرایههای انجمنی را برمیگرداند که به شما اجازه میدهد تا بارگذار خودکارتان را پیکربندی کنید.در این مطلب برخی از کاربردهای اصلی کامپوزر را بررسی کردیم، سلسله مطالب مرتبط را میتوانید از طریق برچسب مطالب مرتبط با کامپوزر دنبال نمایید.
سایر پستهای داکیومنت
- مقدمه
- کاربردهای اصلی
- کتابخانهها
- دستورات و رابط خط فرمان در صف ترجمه
- The composer.json Schema در صف ترجمه
- Repositories در صف ترجمه
- Config در صف ترجمه