برنامه نویسی 483 بازدید

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

پیش‌نیازها

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

یک سرور دبیان 9 به همراه یک کاربر غیر root با دسترسی sudo و فایروالی که پیکربندی شده است.

گام 1 – نصب وابستگی‌ها

پیش از دانلود و نصب کامپوزر، مطمئن شوید که همه وابستگی‌های مورد نیاز بر روی سرور شما نصب شده‌اند. ابتدا کش ابزار مدیریت بسته را با استفاده از دستور زیر به‌روزرسانی کنید:

sudo apt update

اینک وابستگی‌ها را نصب می‌کنیم. برای دانلود، نصب و اجرای کامپوزر و php-cli به curl نیاز داریم. بسته php-mbstring برای ارائه تابع‌ها در کتابخانه‌ای که استفاده خواهیم کرد مورد نیاز است. git از سوی کامپوزر برای دانلود وابستگی‌های پروژه‌ها استفاده می‌شود و unzip برای استخراج بسته‌های فشرده مورد استفاده قرار می‌گیرد. همه موارد فوق با دستور زیر قابل نصب هستند:

sudo apt install curl php-cli php-mbstring git unzip

زمانی که این پیش‌نیازها نصب شدند می‌توانیم خود کامپوزر را نصب کنیم.

گام 2 – دانلود و نصب کامپوزر

کامپوزر یک برنامه نصب دارد که در PHP نوشته شده است. آن را دانلود می‌کنیم، بررسی می‌کنیم که فایل خراب نباشد و سپس کامپوزر را نصب می‌کنیم. ابتدا مطمئن شوید که در دایرکتوری home هستید، سپس فایل نصب را با استفاده از curl دانلود کنید:

cd ~

curl -sS https://getcomposer.org/installer -o composer-setup.php

سپس تأیید کنید که هَش SHA-384 با هش آخرین فایل نصبی که در صفحه [Composer Public Keys / Signatures][composer-sigs] قرار دارد، منطبق است. هش را از آن صفحه کپی کرده و به صورت یک متغیر شِل ذخیره می‌کنیم:

HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061

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

php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

خروجی زیر مشاهده می‌شود:

Installer verified

اگر پیام را دیدید، در این صوت باید اسکریپت نصب را دوباره دانلود کرده و مجدداً بررسی کنید که هش صحیح است یا نه. سپس دستور تأیید نصب را مجدد اجرا کنید. زمانی که نصب تأیید شد، می‌توانید به کار خود ادامه دهید.

برای نصب سراسری کامپوزر باید از دستور زیر استفاده کنید که کامپوزر را به عنوان یک نام دستور در سطح سیستم به صورت composer در دایرکتوری usr/local/bin/ نصب می‌کند:

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

خروجی زیر مشاهده می‌شود:

All settings correct for using Composer

Downloading...

Composer (version 1.7.2) successfully installed to: /usr/local/bin/composer

Use it: php /usr/local/bin/composer

برای تست نصب دستور زیر را اجرا کنید:

Composer

در این زمان خروجی زیر را می‌بینید که نسخه کامپوزر و آرگومان‌های آن را نشان می‌دهد:

______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.7.2 2018-08-16 16:57:12

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.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .

بدن ترتیب تأیید می‌شود که کامپوزر با موفقیت روی سیستم نصب شده و در سطح سیستم در دسترس است.

توجه داشته باشید که اگر فایل‌های اجرایی کامپوزر را برای هر پروژه‌ای که روی سرور میزبانی می‌کنید از هم جدا کنید، می‌توانید آن را به صورت محلی بر مبنای هر پروژه‌ نصب کنید. کاربران NPM با این رویکرد آشنا هستند. این روش همچنین هنگامی که کاربر سیستم شما دسترسی نصب در سطح سیستم ندارد، مفید خواهد بود.

برای انجام این کار از دستور php composer-setup.php استفاده می‌کنیم. بدین ترتیب یک فایل composer.phar در دایرکتوری موجود ایجاد می‌شود که می‌توان با استفاده از دستور composer.phar/. آن را اجرا کرد.

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

گام 3 – استفاده از کامپوزر در یک پروژه PHP

پروژه‌های پی‌اچ‌پی غالباً به کتابخانه‌های خارجی وابسته هستند و مدیریت این وابستگی‌ها و نسخه‌های آن‌ها می‌تواند مسئله‌ای پیچیده باشد. کامپوزر این وضعیت را با ردگیری وابستگی‌ها و ساده‌سازی مراحل نصب آن‌ها حل کرده است.

برای استفاده از کامپوزر در پروژه‌تان باید یک فایل composer.json داشته باشید. فایل composer.json به کامپوزر می‌گوید که وابستگی‌ها باید برای یک پروژه دانلود شوند و کدام نسخه از هر بسته مجاز به نصب است. این مسئله برای یکپارچه نگه‌داشتن پروژه شما و احتراز از نصب نسخه‌های ناپایدار که می‌تواند موجب مشکلات در انطباق با نسخه‌های پیشین شود، بسیار مهم است.

نیاز نیست که این فایل را به صوت دستی ایجاد کنیم، چون در این صورت به احتمال زیاد با خطا مواجه می‌شوید. کامپوزر زمانی که با استفاده از دستور required یک وابستگی به پروژه خود اضافه می‌کنید، فایل composer.json را به طور خودکار ایجاد می‌کند. می‌توانید وابستگی‌های بیشتری را به روش مشابه بدون نیاز به ویرایش دستی این فایل اضافه کنید.

فرایند استفاده از کامپوزر برای نصب یک بسته به عنوان وابستگی در یک پروژه شامل مراحل زیر است:

  • شناسایی این که اپلیکیشن به چه نوع کتابخانه‌ای نیاز دارد.
  • تحقیق در مورد یک کتابخانه متن-باز مناسب روی Packagist.org که مخزن رسمی بسته‌های کامپوزر است.
  • انتخاب بسته‌ای که می‌خواهید وابستگی‌اش را ایجاد کنید.
  • اجرای دستور composer required برای گنجاندن وابستگی در فایل composer.json و نصب بسته.

برای وضوح بیشتر در ادامه با یک اپلیکیشن نمونه این وضعیت را بررسی می‌کنیم. هدف از این اپلیکیشن تبدیل یک جمله مفروض به رشته‌ای شبیه URL است. این اپلیکیشن در تبدیل عناوین صفحه‌ها به مسیرهای URL یعنی slug متداول است (برای مثال به بخش نهایی URL این صفحه دقت کنید). ابتدا یک دایرکتوری برای پروژه خود ایجاد می‌کنیم که آن را slugify می‌نامیم:

cd ~

mkdir slugify

cd slugify

اینک زمان آن رسیده است که به وب‌سایت packagist.org برویم و به دنبال بسته‌ای که برای ایجاد slug کمک می‌کند بگردیم. اگر به دنبال کلمه slug بگردیم، نتایجی مانند تصویر زیر را مشاهده می‌کنیم:

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

ما در پروژه خود به یک مبدل ساده برای تبدیل رشته متنی به slug نیاز داریم. در نتایج جستجو، بسته cocur/slugify در ظاهر مطابقت مناسبی دارد و مقدار معقولی از نصب و ستاره دارد. این بسته در تصویر فوق کمی پایین‌تر از محدوده اسکرین‌شات قرار دارد.

بسته‌های روی Packagist یک نام vendor و یک نام package دارند. هر بسته یک آی‌دی منحصر به فرد (یک فضای نام) در همان فرمتی که گیت‌هاب برای مخازن خود استفاده می‌کند، (یعنی به شکل vendor/package) دارد. کتابخانه‌ای که می‌خواهیم نصب کنیم از فضای نام cocur/slugif استفاده می‌کند. شما برای الزام (require) کردن بسته در پروژه خودتان به این فضای نام نیاز دارید.

اینک دقیقاً می‌دانیم که چه بسته‌ای را می‌خواهیم نصب کنیم و دستور composer require را برای require کردن آن به صورت یک وابستگی اجرا می‌کنیم و همچنین فایل composer.json را برای پروژه اجرا می‌کنیم:

composer require cocur/slugify

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

Using version ^3.1 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 (v3.1): Downloading (100%)

Writing lock file

Generating autoload files

همان طور که در خروجی فوق می‌بینید، کامپوزر به طور خودکار تصمیم گرفته است که کدام نسخه از بسته را مورد استفاده قرار دهد. اگر اینک دایرکتوری پروژه را بررسی کنید، می‌بینید که دو فایل composer.json و composer.lock و یک دایرکتوری vendor در آن وجود دارد:

ls –l

خروجی

total 12

-rw-r--r-- 1 sammy sammy 59 Sep 7 16:03 composer.json

-rw-r--r-- 1 sammy sammy 2934 Sep 7 16:03 composer.lock

drwxr-xr-x 4 sammy sammy 4096 Sep 7 16:03 vendor

فایل composer.lock برای ذخیره‌سازی اطلاعاتی در مورد نسخه‌هایی که از هر یک از بسته‌ها نصب شده است استفاده می‌شود و تضمین می‌کند که اگر کس دیگری پروژه شما را کلون کند و بخواهد وابستگی‌ها را نصب کند از همان نسخه‌ها استفاده می‌کند. دایرکتوری vendor جایی است که وابستگی‌های پروژه قرار دارند. پوشه vendor لازم نیست در کنترل نسخه کامیت شود، تنها کافی است که فایل‌های composer.json و composer.lock را داشته باشیم.

هنگامی که یک پروژه که قبلاً شامل فایل composer.json می‌شود را می‌خواهید نصب کنید، دستور composer install را اجرا کنید تا وابستگی‌ها پروژه را دانلود کنید.

در ادامه نگاه گذرایی به محدودیت‌های نسخه‌ها خواهیم داشت. اگر محتوای فایل composer.json خود را بررسی کنید، چیزی شبه زیر را می‌بینید:

cat composer.json

خروجی

{

"require": {

"cocur/slugify": "^3.1"

}

}

ممکن است متوجه کاراکتر خاص ^ پیش از شماره نسخه در فایل composer.json شده باشید. کامپوزر از چندین قید و قالب مختلف برای تعریف کردن نسخه‌های بسته require شده بهره می‌گیرد تا هم انعطاف‌پذیری داشته باشد و هم پروژه را در وضعیت پایدار حفظ کند. کاراکتر خاص عملگر (^) از سوی فایل‌های تولید شده خودکار composer.json استفاده می‌شود و در واقع نسخه پیشنهادی برای درون‌یابی بیشینه بر اساس قواعد نسخه بندی معنایی است. در این مورد نسخه 3.1 به عنوان کمترین نسخه دارای انطباق ذکر شده و امکان به‌روزرسانی به هر کدام از نسخه‌های آتی زیر 4.0 وجود دارد.

به بیان کلی‌تر لازم نیست که قید‌های نسخه را در فایل composer.json دستکاری کنید. با این حال در برخی موقعیت‌ها لازم است که این قیدها را به طور دستی ویرایش کنید، برای نمونه زمانی که یک نسخه جدید اصلی (major) از کتابخانه مورد نیاز شما انتشار یافته است و می‌خواهید این وابستگی را ارتقا دهید یا هنگامی که کتابخانه‌ای که می‌خواهید استفاده کنید، امکان نسخه بندی معنایی ندارد، می‌توانید فایل را به صورت دستی ویرایش کنید.

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

قید معنی نمونه نسخه‌های مجاز
^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

برای این که دیدی عمیق‌تر از قیدهای نسخه داشته باشید به مستندات رسمی کامپوزر مراجعه کنید. در ادامه به بررسی شیوه بارگذاری خودکار وابستگی‌ها در کامپوزر خواهیم پرداخت:

گام 4 – گنجاندن اسکریپت بارگذاری خودکار (Autoload)

از آن جا که PHP به طور خودکار کلاس‌ها را بارگذاری نمی‌کند، کامپوزر یک اسکریپت بارگذاری خودکار ارائه کرده است که می‌توانید در پروژه خود بگنجانید تا به راحتی از امکان بارگذاری خودکار بهره‌مند شوید. بدین ترتیب امکان کار با وابستگی‌ها بسیار آسان‌تر می‌شود.

تنها کاری که باید انجام دهید این است که فایل vendor/autoload.php را پیش از ایجاد وهله‌ای از هر کلاس در اسکریپت‌های PHP خود بگنجانید. این فایل زمانی که نخستین وابستگی خود را اضافه کنید، به طور خودکار از سوی کامپوزر تولید می‌شود.

در اپلیکیشن خود این وضعیت را بررسی می‌کنیم. فایل test.php را ایجاد و در ویرایشگر متنی باز می‌کنیم:

nano test.php

کد زیر را که در فایل vendor/autoload.php وجود دارد وارد می‌کنیم تا وابستگی cocur/slugify بارگذاری شود. از آن برای ایجاد slug استفاده می‌کنیم:

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

use Cocur\Slugify\Slugify;

$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.lock نیز برای نشان دادن این تغییرات به‌روزرسانی می‌شود.

همچنین می‌توانید یک یا چند مورد از کتابخانه‌های خاص را به صورت زیر به‌روزرسانی کنید:

composer update vendor/package vendor2/package2

اطمینان حاصل کنید که فایل‌های composer.json و composer.lock پس از به‌روزرسانی وابستگی‌ها، عملکرد صحیحی دارند تا افراد دیگر نیز بتوانند این نسخه‌های جدیدتر را نصب کنند.

نتیجه‌گیری

کامپوزر ابزار قدرتمندی است که هر توسعه‌دهنده PHP باید در میان ابزارهای خود آن را داشته باشد. ما در این راهنما مراحل نصب کامپوزر روی سیستم‌های دبیان و اوبونتو را بررسی کرده و آن را در یک پروژه ساده مورد استفاده قرار دادیم. اینک می‌دانید که چگونه می‌توانید وابستگی‌های پروژه‌های پی‌اچ‌پی خود را نصب و به‌روزرسانی کنید.

کامپوزر علاوه بر ارائه روشی آسان و مطمئن برای مدیریت وابستگی‌های پروژه، استاندارد تثبیت‌شده‌ای برای اشتراک و یافتن بسته‌های PHP که از سوی جامعه توسعه‌دهندگان ایجاد می‌شوند نیز ارائه کرده است.

اگر به این نوشته علاقه‌مند بودید، موارد زیر نیز احتمالاً مورد توجه شما قرار خواهند گرفت:

==

اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«میثم لطفی» دانش‌آموخته ریاضیات و شیفته فناوری به خصوص در حوزه رایانه است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار نیز با مجله فرادرس همکاری دارد.

بر اساس رای 1 نفر

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

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *