composer چیست ؟

Image تحقیقات

composer چیست ؟

با سلام و درود

پیش از اینکه ببینیم کامپوزر (composer) چیست، می بایست با مفهومی تحت عنوان Dependency Management آشنا شویم. زمانی که ما اقدام به برنامه نویسی می کنیم، فارغ از اینکه از چه فریم ورک یا زبان برنامه نویسی برای کدنویسی استفاده می‌کنیم گاهی اوقات نیاز به استفاده از کدها، پکیج ها، و لایبرری های سایر برنامه نویسان که به صورت متن باز در اینترنت عرضه شده‌اند داریم تا بتوانیم به جای آنکه خود اقدام به نوشتن کلاس خاصی کنیم، از کدهایی که قبلاً توسط سایر توسعه دهندگان نوشته شده و آزمایش خود را پس داده‌اند استفاده کنیم که از جمله این Dependency ها می‌توان به فریم ورک های سی اس اس، پلاگین های جی کوئری و سایر پروژه اشاره کرد.

 

به طور خلاصه، کامپوزر(composer) ابزاری است که فرایند مدیریت Dependency ها را برای ما تسهیل می کند. برای آشنایی بیشتر با مفهوم مدیریت Dependency مثال ساده‌ای می زنیم. فرض کنید که شما قصد دارید یک وب سایت تک صفحه‌ای طراحی کنید و برای کدهای سی اس اس و جاوا اسکریپت خود می‌خواهید از فریم ورک فاندیشن استفاده کنید. برای استفاده از این فریم ورک دو راه‌کار پیش رو است: اول اینکه به وب سایت رسمی این فریم ورک رفته و پکیج آن را دانلود کرده و درون پروژه خود قرار دهید اما با استفاده از این روش اگر بخواهید کدهای فریم ورک خود را آپدیت کنید چه راه‌کاری به ذهن شما می رسد؟ این این فرایند دانلود، کپی و پیست کردن را مجدد تکرار می‌کنید یا راه‌کار به مراتب بهتری هم هست؟ نکته مهم اینجا است که اگر شما روی پروژه ای کار کنید که به جای یک فریم ورک، از چندین فریم ورک مختلف در آن استفاده شده باشد کار شما به مراتب دشوار تر خواهد شد.

 

این همان چالشی است که مفهوم مدیریت Dependency آن را حل می کند. در واقع، با استفاده از مفهوم Dependency Management می‌توان ماژول ها، پکیج ها و فریم ورک های مد نظر خود را به صورت به مراتب بهتری انجام داد. به عبارت دیگر، مدیریت منابع خارجی روش دانلود پکیج ها، آپدیت آن‌ها و … را استانداردسازی کرده و با استفاده از این رویکرد، مدیریت پروژه شما به مراتب آسان‌تر خواهد شد. حال که متوجه شدیم مدیریت Dependency چیست، اکنون می بایست با ابزاری آشنا شویم که این کار را به سادگی برای ما به انجام خواهد رساند و این ابزار چیزی نیست جزء Composer. کامپوزر (composer)  در ابتدای ماه مارس سال ۲۰۱۲ به صورت رایگان به دنیا عرضه شد و تاکنون استقبال بسیار خوبی از این ابزار به‌خصوص از طرف برنامه نویسان زبان برنامه نویسی PHP صورت گرفته است.

به طور خلاصه، کامپوزر(composer)  یک ابزار Command Line است که در آن با استفاده از یکسری دستورات از پیش تعریف شده، می‌توان به مدیریت منابع خارجی برای استفاده در پروژه خود پرداخت. حال ممکن است این سؤال برای شما پیش بیاید که ابزار کامپوزر (composer) پکیج های مورد نیاز را از کجا دانلود می کند. در پاسخ به این سؤال باید گفت که منبع اصلی که کامپوزر از آن استفاده می‌کند سایتی تحت عنوان Packagist.org است که به عنوان فضایی می باشد که توسعه دهندگان فریم ورک هایی که می‌نویسند را در آنجا آپلود کرده و از آن پس با استفاده از کامپوزر می‌توان به کلیه پکیج های قرار گرفته روی این سایت دسترسی داشت. کامپوزر را هم روی ویندوز می‌توان نصب کرد و هم روی سیستم عامل هایی که بر پایه یونیکس هستند مثل مکینتاش و لینوکس (ورود به سایت Composer). زمانی که شما می‌خواهید از این ابزار استفاده کنید، صرفاً نیاز به یک فایل تحت عنوان composer.json خواهید داشت که کدهای قرار گرفته داخل آن چیزی شبیه به کدهای زیر است:

{
	"name": "zendframework/skeleton-application",
	"description": "Skeleton Application for ZF2",
	"license": "BSD-3-Clause",
	"keywords": [
	"framework",
	"zf2"
],
"homepage": "http://framework.zend.com/",
	"require": {
		"php": ">=5.3.3",
		"zendframework/zendframework": "~2.3"
}
}

 

همان‌طور که در کد فوق ملاحظه می شود، نیازمندی های پروژه شما در بخش require آمده است. برای مثال، در کد فوق ما دستور داده‌ایم که به زبان برنامه نویسی پی اچ پی نسخه ۵.۳.۳ و همچنین فریم ورک زند نسخه ۲.۳ نیاز داریم. حال صرفاً نیاز است تا از طریق پنجرهCommand Line وارد فولدر پروژه مد نظر خود شده و دستور composer install را اجرا کنیم. بسته به پکیج هایی که در بخش require تعریف کرده ایم، کلیه پکیج ها دانلود شده و برخی تنظیمات اولیه هم به صورت خودکار صورت می پذیرد.

یکی دیگر از وظایف composer مدیریت لود کلاس ها می باشد و عملکرد آن به گونه ای است که تنها زمانی یک کلاس لود خواهد شد که شما در کد  آن را فراخوانی کرده باشید که این امر تاثیر بسیار زیادی در سرعت لود پروژه شما خواهد داشت .

مدیریت وابستگی ها در حقیقت مفهومی جدید نمی باشد و در واقع composer  از ابزار NPM در Nodjs و bandler در Roby الهام گرفته شده است . همچینین composer در حال حاضر برای php نسخه  5.3.2 به بالا قابل اجرا است ، برای جلوگیری از خطاهای احتمالی حدالمقدور از php نسخه 5.3.4 به بالا استفاده شود .

شما ممکن است درباره‌ی PEAR هم اطلاعاتی داشته باشید. PEAR یک مدیر بسته برای PHP می‌باشد که سال‌ها است مورد استفاده قرار می‌گیرد. اما PEAR توسط خیلی از توسعه‌دهنده‌گان PHP به چند دلیل دیگر زیاد مورد استفاده نیست. یکی از این دلیل‌ها این است که خیلی از کدها در PEAR به روز نیستند.

 

نصب Composer در سیستم‌های تحت یونیکس

نصب Composer واقعا آسان است و خیلی راحت توسط خط فرمان می‌توان آن را نصب کرد.

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

$ curl -s https://getcomposer.org/installer | php

$ sudo mv composer.phar /usr/local/bin/composer

 

اولین فرمان فایل composer.phar رو دانلود می‌کند و فرمان دوم فایل composer.phar را به داخل پوشه اجرایی منتقل می‌کند.

حال با نوشتن فرمان زیر می‌توانید آن را اجرا کنید:

$ composer

نصب Composer در ویندوز

برای نصب composer در سیستم‌های ویندوزی کافی است فایل exe آن را از سایت سازنده دریافت کنید.

مثالی از استفاده از composer :

برای شروع به کار با composer می‌توانید بسته‌های مورد نیاز را به پروژه اضافه کنید. برای ایجاد یک فایل پیکربندی Composer، شما باید یک فایل JSON در پوشه اصلی (root) پروژه خود ایجاد کنید.

برای مثال اگر بخواهیم از فریمورک Slim استفاده کنیم، باید داخل فایل composer.json این متن را بنویسیم:

{

"require": {

"slim/slim": "2.*"

}

}

برای نصب Slim توسط Composer می‌توانید از این فرمان استفاده کنید:

این فرمان به صورت خودکار Slim را دانلود کرده و در پوشه vendor/slim/slim قرار می‌دهد.

 

بارگذاری خودکار

وقتی که بسته‌های مختلفی را داریم, نیاز است تا آن‌ها را به صورت خودکار در پروژه بارگذاری کنیم. خوشبختانه Composer همراه با یک فایل بارگذاری خودکار می‌آید که این توانایی را داراست تا تمام فایل‌ها را به صورت خودکار در پروژه بارگذاری کند.

برای استفاده از امکان بارگذاری خودکار Composer کافی است این کد را در فایل اصلی پروژه اضافه کنید:

require 'vendor/autoload.php';

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

برای مثال:

// Autoload
require'vendor/autoload.php';
// Instantiate a Slim application
$app= new\Slim\Slim();
// Define a HTTP GET route
$app->get('/hello/:name', function($name) {
echo"Hello, $name";
});
// Run the Slim application
$app->run();
اگر شما یک توسعه‌دهنده‌ی PHP هستید، Composer قطعا یک دوست صمیمی برای شما می‌شود و از آنجایی که استفاده از آن هر روز در حال افزایش است، در آینده به یک ابزار ضروری در توسعه وب با استفاده از PHP تبدیل می‌شود.
 
با استفاده از composer زبان PHP توسعه‌دهنده‌پسندتر (!) می‌شود و دیگر شما با کدهای کثیف و طولانی روبرو نخواهید شد. Composer یک مشکل بزرگ در PHP را حل کرده است. دیگر هیچ دلیلی نیست که بتواند جلوی شما رو از شروع کردن به یادگیری PHP بگیرد.

روش های مشخص کردن ورژن

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

Version Range

می توانیم با استفاده ار عملگرهای مقایسه ای رنج خاصی از ورژن را مشخص نماییم.مانند :

  • >
  • <
  • =>
  • =<
  • =!
  • ||

برای مثال اگر ورژن را به صورت زیر مشخص نماییم یعنی ورژن های بالاتر از 2.7 آن کتابخانه مدنظرمون هست.

>2.7

و یا اگر به صورت زیر باشد یعنی ورژن هایی بالاتر از 2.7 و کوچکتر از 3.5

Wildcard Versions

می توانیم محدود وسعی را به طور خاص دیگر معرفی نماییم..به فرض :

2.3.*

عبارت بالاورژنی را شامل محدوده ی بزرگ تر از 2.3 و کوچیکتر از 2.4 را در بر میگیرد. (مثلا 2.3.3)

یعنی :

>=2.3.0 <2.4

Hyphen Ranges

روش دیگر استفاده از علامت – می باشد.به عنوان مثال شرط زیر به معنای بالا تر مساوی 2.0.0 و کوچکتر مساوی  3.0.0

2.0.0 - 3.0.0

Tilde Range

روش دیگر با استفاده از علامت ~ می باشد.

برای مثال  3.6 ~ به معنای رنج زیر می باشد.

>-3.6 <4.0

برخی دستورات composer

وارد کردن یه پکیج به پکیج های داخل composer  مثلا پکیج monolog/monolog”:”1.0.* :

composer require "monolog/monolog":"1.0.*"

مقدار دهی و ساخته اولیه فایل composer.json

نصب پکیج ها :

آپدیت پکیج ها :

ساخت مجدد autoload

آپدیت فایل composer.phar به اخرین ورژن

برگرفته از سایت سکان آکادمی

موفق و پیروز باشید.