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

لیست تغییرات و بهینه‌سازی نسبتاً طولانی است. برای مشاهده تمام تغییرات می‌توانید changelog در گیت‌هاب را بررسی کنید، ولی در اینجا به برخی نکات برجسته در این رابطه اشاره می‌کنیم.

بهینه‌سازی‌های سطح عملکرد

تغییرات نسبتاً اساسی در این زمینه، از پروتکل مورد استفاده بین کمپوزر و packagist.org گرفته تا رفع برخی مشکلات مانند دانلود فایل‌ها به صورت همزمان با curl و بهینه‌سازی ارزیابی محدودیت‌ها صورت گرفته است. در نتیجه، بهبودهای قابل‌توجهی در سرعت و میزان استفاده از حافظه مشاهده می‌شود. ممکن است این سطح بهینه‌سازی در هر سیستمی تفاوت داشته باشد، ولی در تجربه‌ای که نگارنده در پروژه‌های معمول خود داشته، این رقم در حدود ۵۰ درصد است. در صورت، استفاده از کمپوزر 2 می‌تواند شما  را کاملاً شگفت‌زده کند.

به عنوان یک نکته حاشیه‌ای، باید گفت که در حال حاضر بروزرسانی‌های جزئی، درخواست و حذف بسیار سریع‌تر انجام می‌گیرند. چرا که  کمپوزر 2 تنها متادیتا‌ یا فراداده‌هایی را از بسته‌ها بارگذاری می‌کند که دچار تغییر شده‌اند.

زمان موردنیاز برای بروزرسانی اولیه و نصب (در زمان راه‌اندازی پروژه و حافظه پنهان خالی) با کمپوزر 2 و فعال‌بودن ابزار ext-curl، شصت‌ درصد سریع‌تر انجام می‌گیرد.

زمان موردنیاز برای بروزرسانی اولیه و نصب (در زمان راه‌اندازی پروژه و حافظه پنهان خالی) با کمپوزر 2 و فعال‌بودن ابزار ext-curl، شصت‌ درصد سریع‌تر انجام می‌گیرد.

تغییرات ساختاری

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

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

ویژگی‌های ران‌تایم

در ابتدای راه‌اندازی vendor/autoload.php، یک مرحله بررسی پلتفرم اضافه شده که نسخه کنونی PHP و در صورت تمایل افزونه‌های آن را چک می‌کند. این ویژگی به صورت پیش‌فرض فعال است و بنابراین، حتماً به پیغام‌های آن توجه کنید تا بعداً غافلگیر نشوید.

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

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

اگر کد شما متکی به یکی از این ویژگی‌های ران‌تایم بود، حتماً به “composer-runtime-api”: “^2.0” در composer.json احتیاج خواهید داشت. این همان بسته مجازی‌ای است که توسط کمپوزر ارائه شده و باعث می‌شود که افراد برای نصب بسته شما حتماً به نصب کمپوزر 2 نیاز داشته باشند.

بهبود گزارش خطاها

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

بروزرسانی‌های جزئی با محدودیت‌های موقتی

گاهی اوقات لازم است که به عنوان مثال، برای حل یک مشکل ساده و تست یک عملکرد، نیاز به ارتقا یا استفاده از نسخه قدیمی‌تر یک بسته داشته باشید. اکنون برای این منظور می‌توانید فرمان composer update vendor/package:1.0.* را به عنوان مثال استفاده کنید و نسخه موردنظر از کمپوزر (1.0.12 یا هر نسخه دیگری) را در اختیار داشته باشید. توجه داشته باشید که این کار composer.json را بروزرسانی نمی‌کند و همچنین فایل lock را غیرقابل‌استفاده نخواهد کرد.

در صورتی که بخواهید یک قید یا محدودیت را اضافه یا اصلاح کنید و در همین حال، مشغول بروزرسانی تمام بخش‌های برنامه باشید، می‌توانید از update –with vendor/package:1.0.* استفاده نمایید. در نتیجه، روند بروزرسانی با محدودیت‌های اضافی ادامه می‌یابد.

نحوه بروزرسانی

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

  • کمپوزر 2 هنوز هم از PHP 5.3 و نسخه‌های بالاتر آن پشتیبانی می‌کند؛ درست به مانند کمپوزر x.
  • فایل‌های lock امکان جابجایی بین نسخه‌های مختلف را دارند و بنابراین، پس از ارتقا به نسخه 2.0، به راحتی و در صوتر نیاز می‌توانید به نسخه قبلی برگردید.
  • بسیاری از فرمان‌ها و آرگومان به همان فرم قبلی باقی مانده‌اند و کاربران به راحتی می‌توانند با نسخه جدید ارتباط برقرار کنند.

اگر بروزرسانی خودکار کمپوزر را از نسخه 1.x انجام دهید، یک پیغام هشدار مبنی بر وجود یک نسخه پایدار جدید برایتان ظاهر می‌شود. در نتیجه، می‌توانید از فرمان composer self-update –2 to برای مهاجرت به نسخه جدید استفاده کنید. در همین حال، دستورالعمل‌های خاص فریم‌‌ورک‌ها، CMS ها و اپلیکیشن‌های مختلف برای بروزرسانی در صفحه گیت‌هاب در دسترس قرار دارند.

در صورتی که با هر مشکلی روبرو شدید، در هر زمان می‌توانید با استفاده از فرمان composer self-update –1 به عقب برگردید. البته خوشبختانه بسیاری از افراد با نسخه جدید راحت هستند و نیازی به برگشت به نسخه قبلی پیدا نمی‌کنند.

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

نمایش پیغام Command “self-update” is not defined

در صورتی که برای نصب کمپوزر از ابزار مدیریت بسته سیستم‌عامل خود استفاده می‌کنید، ممکن است به فرمان self-update دسترسی نداشته باشید. بر این اساس از فرمان which composer استفاده کنید تا مسیری مانند /usr/bin/composer تشخیص داده شود. سپس اسکریپت نصب را با اضافه‌کردن گزینه –install-dir /usr/bin –filename composer به خط php composer-setup.php اجرا کنید.  در نتیجه، مسیر نصب برای ابزار مدیریت بسته اصلاح می‌شود.

میزان سازگاری با نسخه‌های قبلی

در اینجا به مهمترین مواردی که ممکن است موجب بروز مشکل در روند بروزرسانی‌ها شوند، اشاره می‌کنیم.

  • پلاگین‌ها ممکن است بزرگترین منبع بروز مشکل برای بسیاری از افراد باشند. برای سازگاری با کمپوزر 2 لازم است که پلاگین‌ها را حتماً بروزرسانی کنیم و بایستی دقت کنید که برخی از آنها هنوز برای کمپوزر 2 آماده نشده‌اند. بنابراین باید حتماً تمام موارد مورد نیاز خود را در ارتقا به کمپوزر 2 درنظر داشته باشید.
  • ویژگی جدید بررسی پلتفرم‌ها به این معنی است که کمپوزر 2 نسخه ران‌تایم PHP و همین‌طور در صورت تمایل، افزونه‌ها را بررسی می‌کند تا از مطابقت با شرایط پروژه اطمینان حاصل شود. در صورتی که هر گونه عدم‌مطابقت مشاهده شد، برنامه autoloader متوقف و خارج شده و جزئیات خطا نمایش داده می‌شود. در این حالت، هیچ‌کدام از مشکلات نباید نادیده گرفته شوند. برای جلوگیری از بروز مشکلات، توصیه می‌شود که فرمان composer check-platform-reqs را همراه فرآیند production PHP اجرا نمایید.
  • اولویت در منابع: در صورتی که یک بسته در منبعی با اولویت بالاتر موجود بود، کمپوزر 2 آن را در منابع با اولویت پایین‌تر نادیده می‌گیرد. در صورتی که با کمپوزر 2 نمی‌توانید به برخی بسته‌ها دسترسی پیدا کنید، برای مطالعه جزئیات بیشتر می‌توانید اسناد مربوط به اولویت در منابع را در اینجا مطالعه کنید.
  • پیغام عدم‌اعتبار تنظیمات PSR-0 / PSR-4 دیگر به صورت خودکار در حالت optimized-autoloader نمایش داده نمی‌شوند. این هشدارها قبلاً در کمپوزر 10 معرفی شده بودند. البته بسیاری از این هشدارها برای کلاس‌هایی بودند که در صورت، به صورت خودکار بارگذاری نمی‌شدند. ولی در هر صورت، این اقدام مناسبی است که در این بروزرسانی انجام شده است.

مسیر پیش روی کمپوزر

با وجود مجموعه گسترده‌ای از ویژگی‌های جدید در کمپوزر 2، هنوز جزئیات زیادی در رابطه با مراحل توسعه بعدی منتشر نشده است. ولی به نظر می‌رسد که پشتیبانی نسخه PHP همچنان تغییر خواهد نمود.

همان‌طور که قبلاً نیز اشاره شد، کمپوزر 2.0 از PHP 5.3+ پشتیبانی می‌کند. این همان‌ نسخه‌ای از PHP است که در حال حاضر مدت زیادی از تاریخ آن گذشته و در نتیجه، نگهداری و پشتیبانی از کدها را را بسیار مشکل می‌کند. در هر صورت، همه تلاش‌ها برای این بوده‌اند که  هر کاربری بتواند به‌راحتی به کمپوزر 2 بروزرسانی کند. با این وجود احتمالاً در نسخه‌های بعدی، پشتیبانی از نسخه‌های EOL PHP متوقف خواهد شد.