Composer يك ابزار مديريت وابستگي محبوب براي PHP است كه عمدتاً براي تسهيل نصب و به روزرساني براي متعلقات پروژه ايجاد شده است. اين ابزار بررسي خواهد كرد كه يك پروژه خاص به چه بسته هاي ديگري متكي است و با استفاده از نسخه هاي مناسب با توجه به نياز پروژه ، آنها را براي شما نصب مي كند. Composer همچنين معمولاً براي راه اندازي پروژه هاي جديد بر اساس چارچوب هاي محبوب PHP مانند Symfony و Laravel استفاده مي شود.
در اين آموزش ، نصب و شروع Composer را روي يك سيستم Ubuntu 20.04 بررسي مي كنيد.
پيش نيازها
براي دنبال كردن اين راهنما ، به عنوان يك كاربر sudo غير ريشه به يك سرور مجازي Ubuntu 20.04 و يك فايروال فعال شده روي سرور مجازي خود نياز داريد. براي انجام اين كار، مي توانيد راهنماي تنظيم اوليه سرور مجازي ما براي اوبونتو 20.04 را دنبال كنيد.
مرحله 1 – نصب PHP و متعلقات اضافي
علاوه بر متعلقاتي كه قبلاً بايد درون سيستم اوبونتو 20.04 شما مانند git و curl وجود داشته باشد ، Composer براي اجراي اسكريپت هاي PHP در خط فرمان ، به php-cli نيز و براي اكستركت بايگاني هاي zip شده به unzip نياز دارد. اكنون اين وابستگي ها را نصب خواهيم كرد.
ابتدا حافظه نهان مدير بسته را با اجراي اين دستور به روز كنيد:
⦁ $ sudo apt update
⦁
در مرحله بعدي ، براي نصب بسته هاي مورد نياز ، دستور زير را اجرا كنيد:
⦁ $ sudo apt install php-cli unzip
⦁
از شما خواسته مي شود كه نصب را با تايپ Y و سپس ENTER تأييد كنيد.
پس از نصب پيش نيازها ، مي توانيد به سراغ نصب Composer برويد.
مرحله 2 – دانلود و نصب Composer
Composer اسكريپت نصب كننده اي را فراهم مي كند كه به زبان PHP نوشته شده است. آن را دانلود خواهيم كرد ، و تأييد مي كنيم كه مشكلي ندارد ، و سپس از آن براي نصب Composer استفاده خواهيم كرد.
مطمئن شويد كه در ديركتوري هوم خود قرار داريد ، سپس نصب را با استفاده از curl بازيابي كنيد:
⦁ $ cd ~
⦁
⦁ $ curl -sS https://getcomposer.org/installer -o composer-setup.php
در مرحله بعد ، تأييد خواهيم كرد كه نصب كننده دانلود شده با هش SHA-384 براي جديدترين نصب كننده در صفحه كليدهاي عمومي Composer / امضاها مطابقت دارد. براي تسهيل مرحله تأييد ، مي توانيد از دستور زير استفاده كنيد تا آخرين hash را از صفحه Composer به طور برنامه وار بدست آوريد و آن را در متغير پوسته ذخيره كنيد:
⦁ $ HASH=`curl -sS https://composer.github.io/installer.sig`
⦁
اگر مي خواهيد مقدار به دست آمده را تأييد كنيد ، مي توانيد اين دستور را اجرا كنيد:
⦁ $ echo $HASH
⦁
Output
e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a
اكنون كد PHP زير را ، همانطور كه در صفحه دانلود Composer ارائه شده است ، اجرا كنيد تا تأييد كنيد كه اسكريپت نصب براي اجرا امن است:
⦁ $ php -r “if (hash_file(‘SHA384’, ‘composer-setup.php’) === ‘$HASH’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL;”
⦁
خروجي زير را مشاهده خواهيد كرد:
Output
Installer verified
اگر خروجي مي گويد نصب كننده مشكل دارد ، بايد اسكريپت نصب را بار ديگر دانلود كنيد و بررسي كنيد كه از هش درست استفاده مي كنيد. سپس فرايند تأييد را تكرار كنيد. وقتي يك نصب تأييد شده داشتيد ، مي توانيد ادامه دهيد.
براي نصب Composer در سطح جهاني ، از دستور زير استفاده كنيد كه Composer را به عنوان يك فرمان در گستره سيستم به نام Composer تحت ، usr / local / bin دانلود و نصب مي كند:
⦁ $ sudo php composer-setup.php –install-dir=/usr/local/bin –filename=composer
⦁
خروجي مشابه اين را مشاهده خواهيد كرد:
Output
All settings correct for using Composer
Downloading…
Composer (version 1.10.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
براي آزمايش نصب خود ، اجرا كنيد:
⦁ $ composer
⦁
Output
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ / __ `__ / __ / __ / ___/ _ / ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
____/____/_/ /_/ /_/ .___/____/____/___/_/
/_/
Composer version 1.10.5 2020-04-10 11:44:22
Usage:
command [options] [arguments]
Options:
-h, –help Display this help message
-q, –quiet Do not output any message
-V, –version Display this application version
–ansi Force ANSI output
–no-ansi Disable ANSI output
-n, –no-interaction Do not ask any interactive question
–profile Display timing and memory usage information
–no-plugins Whether to disable plugins.
-d, –working-dir=WORKING-DIR If specified, use the given directory as working directory.
–no-cache Prevent use of the cache
-v|vv|vvv, –verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
…
تأييد مي كند كه Composer با موفقيت روي سيستم شما نصب شده است و در سطح سيستم در دسترس است.
توجه: اگر ترجيح مي دهيد Composer قابل اجراي جداگانه براي هر پروژه اي كه در اين سرور مجازي ميزباني ميكنيد ، داشته باشيد ، مي توانيد آن را به صورت محلي در هر پروژه نصب كنيد. اين روش همچنين زماني مفيد است كه كاربر سيستم شما اجازه نصب نرم افزارهاي گسترده در سيستم را ندارد.
براي اين كار از دستور php Composer -setup.php استفاده كنيد. با اين كار يك فايل composer.phar در دايركتوري فعلي شما ايجاد مي شود ، كه مي تواند با php comper.phar اجرا شود.
اكنون بياييد به استفاده از Composer براي مديريت وابستگي ها بپردازيم.
مرحله 3 – استفاده از Composer در يك پروژه PHP
پروژه هاي PHP اغلب به كتابخانه هاي خارجي متكي هستند ، و مديريت آن وابستگي ها و نسخه هاي آنها مي تواند مشكل باشد. Composer با پيگيري نسخه هاي پروژه و متعلقات آن ، اين مشكل را حل مي كند ، ضمن اينكه روند پيدا كردن ، نصب و به روزرساني بسته هاي مورد نياز يك پروژه را نيز تسهيل مي كند.
براي استفاده از Composer در پروژه خود ، به يك فايل Composer .json احتياج داريد. فايل composer.json به Composer مي گويد كه به كدام متعلقات براي دانلود براي پروژه شما نياز دارد و نصب كدام نسخه هاي هر بسته مجاز است. بسيار مهم است كه پروژه خود را ثابت نگه داريد و از نصب نسخه هاي ناپايدار كه به طور بالقوه مي تواند باعث ايجاد مشكلات سازگاري شود ، خودداري كنيد.
لازم نيست اين فايل را به صورت دستي ايجاد كنيد – معمولا در هنگام انجام اين كار با خطاهاي نحوي روبرو ميشويد. Composer يك روش تعاملي براي ايجاد يك فايل جديد Composer .json بر اساس ورودي كاربر ارائه مي دهد ، اگر قصد داريد پروژه خود را بعدا به عنوان يك بسته عمومي در Packagist به اشتراك بگذاريد ، گزينه خوبي است. وقتي فرمان composer require را اجرا ميكنيد، Composer همچنين يك فايل Composer .json ايجاد مي كند تا يك وابستگي را در يك پروژه تازه ايجاد شده شامل شود.
مراحل استفاده از Composer براي نصب بسته به عنوان متعلقات در يك پروژه شامل مراحل زير است:
• شناسايي كنيد كه برنامه به چه نوع كتابخانه اي نياز دارد.
• در مورد كتابخانه منبع باز مناسب در Packagist.org ، مخزن رسمي بسته بندي Composer تحقيق كنيد.
⦁ بسته اي را كه مي خواهيد به آن متكي باشيد انتخاب كنيد.
• composer require را اجرا كنيد تا وابستگي را در فايل Composer .json شامل شده و بسته را نصب كنيد.
بياييد اين كار را با يك برنامه آزمايشي امتحان كنيم.
هدف از اين برنامه تبديل يك جمله معين به يك رشته سازگار با URL است- يعني يك slug.
اين معمولاً براي تبديل عناوين صفحه به مسيرهاي URL استفاده مي شود (مانند قسمت نهايي URL براي اين آموزش)
بياييد با ايجاد دايركتوري براي پروژه خود شروع كنيم. آن را slugify مي ناميم:
⦁ $ cd ~
⦁
⦁ $ mkdir slugify
⦁
⦁ $ cd slugify
اگرچه لازم نيست ، اكنون مي توانيد يك دستور composer init را اجرا كنيد تا يك فايل composer.jso مفصل را براي پروژه خود ايجاد كنيد. از آنجا كه تنها هدف پروژه ما نشان دادن چگونگي نصب متعلقات با Composer است ، از يك فايل ساده تر Composer .json استفاده خواهيم كرد كه وقتي به اولين بسته خود احتياج داريم ، به صورت خودكار توليد مي شود.
اكنون زمان آن رسيده است كه Packagist.org را براي بسته اي جستجو كنيم كه مي تواند در توليد slugs به ما كمك كند. اگر اصطلاح Slug را در Packagist جستجو كنيد ، نتيجه اي مشابه اين دريافت خواهيد كرد:
در سمت راست هر بسته در ليست ، دو عدد مشاهده خواهيد كرد. عدد بالا نشان مي دهد كه چند بار بسته از طريق Composer نصب شده است ، و عدد پايين نشان مي دهد كه چند بار بسته بندي در GitHub ستاره دار شده است. به طور كلي ، بسته هايي با نصب بيشتر و تعداد بيشتري ستاره ، پايداري بيشتري دارند ، زيرا بسياري از افراد از آنها استفاده مي كنند. همچنين مهم است كه توضيحات بسته را براي ميزان ارتباط بررسي كنيد تا اطمينان حاصل كنيد كه به چه چيز نياز داريد.
ما به مبدل string به slug نياز داريم. از نتايج جستجو ، بسته Cocur / slugify كه به عنوان اولين نتيجه در آن صفحه ظاهر مي شود ، با تعداد معيني نصب و ستاره گزينه خوبي به نظر ميرسد.
بسته هاي Packagist داراي نام vendor و نام package هستند. هر بسته داراي يك شناسه منحصر به فرد (يك فضاي نام) در همان قالب است كه GitHub براي مخازن خود استفاده مي كند: vendor/package. كتابخانه اي كه مي خواهيم نصب كنيم از فضاي نام cocur / slugify استفاده مي كند. براي اينكه در پروژه خود آن را به كار بگيريد ، به فضاي نام بسته نياز داريد.
اكنون كه مي دانيد دقيقاً كدام پكيج را مي خواهيد نصب كنيد ، مي توانيد composer require را اجرا كنيد ، بايد آن را به عنوان يك وابستگي در نظر بگيريد و همچنين فايل Composer .json را براي پروژه خود توليد كنيد. نكته اي كه هنگام به كارگيري بسته ها بايد توجه كنيم اين است كه Composer هم متعلقات سطح برنامه و هم متعلقات سطح سيستم را رديابي مي كند. متعلقات سطح سيستم براي نشان دادن اينكه بسته به كداميك از ماژول هاي PHP متكي است مهم هستند. بسته Cocur / slugify ، به يك ماژول PHP نياز دارد كه ما هنوز نصب نكرده ايم.
هنگامي كه يك بسته مورد نياز به يك كتابخانه سيستمي كه در حال حاضر روي سرور مجازي شما نصب نشده است متكي است ، با خطايي مبني بر اينكه چه چيزي مورد نياز است ، مواجه مي شويد:
⦁ $ composer require cocur/slugify
⦁
Output
Using version ^4.0 for cocur/slugify
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
– Installation request for cocur/slugify ^4.0 -> satisfiable by cocur/slugify[v4.0.0].
– cocur/slugify v4.0.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
…
براي حل مشكل وابستگي سيستم ، مي توانيم با استفاده از apt search ، بسته گمشده را جستجو كنيم:
⦁ $ apt search mbstring
⦁
Output
Sorting… Done
Full Text Search… Done
php-mbstring/focal 2:7.4+75 all
MBSTRING module for PHP [default]
php-patchwork-utf8/focal 1.3.1-1 all
UTF-8 strings handling for PHP
php7.4-mbstring/focal 7.4.3-4ubuntu1 amd64
MBSTRING module for PHP
پس از يافتن نام درست بسته ، مي توانيد بار ديگر از apt براي نصب وابستگي سيستم استفاده كنيد:
⦁ $ sudo apt install php-mbstring
⦁
پس از اتمام نصب ، مجدداً مي توانيد composer require را اجرا كنيد:
⦁ $ composer require cocur/slugify
⦁
Output
Using version ^4.0 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
– Installing cocur/slugify (v4.0.0): Downloading (100%)
Writing lock file
Generating autoload files
همانطور كه از خروجي مشاهده مي كنيد ، Composer به طور خودكار تصميم گرفت از كدام نسخه از بسته استفاده كند. اگر اكنون دايركتوري پروژه خود را بررسي كنيد ، شامل دو فايل جديد خواهد بود: composer.json و composer.lock ، و يك ديركتوري vendor:
⦁ $ ls -l
⦁
Output
total 12
-rw-rw-r– 1 sammy sammy 59 May 4 13:56 composer.json
-rw-rw-r– 1 sammy sammy 3229 May 4 13:56 composer.lock
drwxrwxr-x 4 sammy sammy 4096 May 4 13:56 vendor
از فايل composer.lock براي ذخيره اطلاعات در مورد اين كه كدام يك از نسخه هاي هر بسته نصب شده است استفاده مي شود و اطمينان حاصل مي كند اگر شخص ديگري پروژه شما را كلون كند و متعلقات آن را نصب كند ، از نسخه هاي مشابه استفاده مي شود. دايركتوري vendor جايي است كه وابستگي پروژه در آن واقع شده باشد. پوشه vendor نبايد به كنترل نسخه متعهد باشد – فقط بايد فايل هاي Composer .json و composer.lock را شامل شويد.
هنگام نصب پروژه اي كه از قبل حاوي يك فايل composer.json است ، به منظور دانلود متعلقات پروژه ، composer install را اجرا كنيد.
بياييد نگاهي اجمالي به محدوديت هاي نسخه بيندازيم. اگر محتويات فايل Composer .json خود را بررسي كنيد ، چنين چيزي را مشاهده خواهيد كرد:
⦁ $ cat composer.json
⦁
Output
{
“require”: {
“cocur/slugify”: “^4.0”
}
}
ممكن است متوجه كاراكتر خاص ^ قبل از شماره نسخه در Composer .json شويد. Composer از چندين محدوديت و فرمت مختلف براي تعريف نسخه بسته مورد نياز پشتيباني مي كند ، به منظور ارائه انعطاف پذيري و در عين حال ثابت نگه داشتن پروژه شما. اپراتور caret (^) كه توسط فايل توليد شده توسط composer.json ايجاد شده است ، طبق semantic versioning ، اپراتور توصيه شده براي حداكثر قابليت همكاري است. در اين حالت ، 4.0 را به عنوان حداقل نسخه سازگار تعريف مي كند و به روزرساني هاي هر نسخه بعدي زير 5.0 را امكان پذير مي كند.
به طور كلي ، لازم نيست كه محدوديت هاي نسخه را در فايل Composer .json خود دستكاري كنيد. با اين حال ، در برخي از شرايط ممكن است نياز باشد كه شما محدوديت ها را به صورت دستي ويرايش كنيد – براي مثال ، هنگامي كه نسخه اصلي جديدي از كتابخانه مورد نياز شما منتشر ميشود و مي خواهيد آن را ارتقا دهيد ، يا وقتي كتابخانه اي كه مي خواهيد از آن استفاده كنيد ، نسخه معنايي (semantic versioning) را دنبال نمي كند.
در اينجا چند مثال براي درك بهتر نحوه عملكرد محدوديتهاي نسخه Composer آورده شده است:
Constraint Meaning Example Versions Allowed
^1.0 >= 1.0 < 2.0 1.0, 1.2.3, 1.9.9
^1.1.0 >= 1.1.0 < 2.0 1.1.0, 1.5.6, 1.9.9
~1.0 >= 1.0 < 2.0.0 1.0, 1.4.1, 1.9.9
~1.0.0 >= 1.0.0 < 1.1 1.0.0, 1.0.4, 1.0.9
1.2.1 1.2.1 1.2.1
1.* >= 1.0 < 2.0 1.0.0, 1.4.5, 1.9.9
1.2.* >= 1.2 < 1.3 1.2.0, 1.2.3, 1.2.9
براي مشاهده دقيق تر محدوديت هاي نسخه Composer ، به مقالات رسمي مراجعه كنيد.
در مرحله بعدي ، بياييد ببينيم كه چگونه متعلقات را به طور خودكار با Composer لود كنيم.
مرحله 4 – مشموليت اسكريپت Autoload
از آنجايي كه خود PHP كلاسها را به طور خودكار لود نمي كند ، Composer يك اسكريپت autoload را فراهم مي كند كه مي توانيد در پروژه خود بگنجانيد تا بتوانيد از عملكرد لود خودكار براي پروژه خود استفاده كنيد. اين فايل با افزودن اولين وابستگي ، توسط Composer به طور خودكار توليد مي شود.
تنها كاري كه شما بايد انجام دهيد اينست كه فايل vendor/autoload.php را در اسكريپت هاي PHP خود قبل معرفي و نمونه سازي كلاس بگنجانيد.
بياييد آن را در برنامه نسخه ي نمايشي خود امتحان كنيم. فايل جديدي به نام test.php را در ويرايشگر متن خود باز كنيد:
⦁ $ nano test.php
⦁
كد زير را اضافه كنيد كه فايل vendor/autoload.php را وارد مي كند ، وابستگي Cocur / slugify را لود مي كند ، و از آن براي ايجاد يك slug استفاده مي كند:
test.php
require __DIR__ . ‘/vendor/autoload.php’;
use CocurSlugifySlugify;
$slugify = new Slugify();
echo $slugify->slugify(‘Hello World, this is a long sentence and I need to make a slug from it!’);
فايل را ذخيره كنيد و از ويرايشگر خود خارج شويد.
اكنون اسكريپت را اجرا كنيد:
⦁ $ php test.php
⦁
خروجي زير را ايجاد ميكند:
hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
هنگام انتشار نسخه هاي جديد، متعلقات به آپديت نياز دارند ، بنابراين بياييد ببينيم چگونه اين كار را انجام دهيم
مرحله 5 – بروزرساني متعلقات پروژه
هر زمان كه مي خواهيد متعلقات پروژه خود را به نسخه هاي جديدتر بروزرساني كنيد ، دستور update را اجرا كنيد:
⦁ $ composer update
⦁
با اين كار نسخه هاي جديدتري از كتابخانه هاي مورد نياز پروژه شما جستجو مي شوند. اگر نسخه جديدتري پيدا شود و با محدوديت نسخه تعريف شده در فايل composer.json سازگار باشد ، Composer نسخه جديد را جايگزين قبلي مي كند. فايل composer.lock به روز خواهد شد تا اين تغييرات را منعكس كند.
همچنين مي توانيد يك يا چند كتابخانه خاص را با مشخص كردن آنها مانند اين به روز كنيد:
⦁ $ composer update vendor/package vendor2/package2
⦁
بعد از به روزرساني متعلقات خود ، حتماً فايل هاي Composer .json و composer.lock را در سيستم كنترل نسخه خود بررسي كنيد تا ديگران بتوانند اين نسخه هاي جديدتر را نيز نصب كنند.
نتيجه
Composer ابزاري قدرتمند است كه مي تواند كارآيي مديريت متعلقات را در پروژه هاي PHP تا حد زيادي تسهيل كند. و يك روش مطمئن براي كشف ، نصب و به روز رساني بسته هاي PHP فراهم مي كند كه يك پروژه به آن بستگي دارد. در اين راهنما ، ما چگونگي نصب Composer ، چگونگي گنجاندن متعلقات جديد در يك پروژه و نحوه به روزرساني اين متعلقات را در صورت وجود نسخه هاي جديد ، بررسي كرديم.
برچسبها:Cocur / slugify, Composer, Laravel, Symfony