برنامه‌نویسی

جدیدترین قابلیت‌های Composer 2.0

جدیدترین قابلیت‌های composer 2

در این مقاله قصد داریم تا برخی از برجسته‌ترین تغییرهای Composer 2.0 را بررسی کنیم اما برای مشاهده‌ی تمام تغییرها می‌توانید به این آدرس مراجعه کنید.

بهبود عملکرد

تقریبا می‌توان گفت همه‌ی پروتکل‌های مورد استفاده میان Composer و Packagist اصلاح شده‌اند تا مدیریت شفاف‌تری بر روی وابستگی‌ها داشته باشیم، برای مثال می‌توانیم به بارگیری فایل به صورت موازی با استفاده از curl اشاره داشته باشیم که بهینه‌سازی‌ها و اصلاحات بسیاری در این مورد انجام شده و درنهایت از نظر سرعت و استفاده از حافظه‌، پیشرفت چشم‌گیری رخ داده است.

البته تفاوت‌های ایجاد شده به نوع استفاده شما بستگی دارد، اگرچه گزارش‌ها حاکی از آن هستند که در مواردی بیش از ۵۰% پیشرفت حاصل شده اما نمی‌توانیم عدد مشخصی را اعلام کنیم بااین‌حال این اطمینان وجود دارد که شما با Composer 2.0 شگفت‌زده خواهید شد و در آن شکی نیست.

در مواردی مانند require یا remove و به‌روزرسانی‌های جزئی سرعت بیشتری را تجربه خواهید کرد زیرا Composer 2.0 فقط metadata پکیج‌هایی که در حال تغییر هستند را دریافت می‌کند.

بهبود سرعت در composer 2
همان‌طور که مشاهده می‌کنید زمان به‌روزرسانی اولیه به همراه با نصب یک پروژه boostrap شده بدون cache با استفاده از Composer 2.0 و فعال بودن ext-curl تقریبا ۶۰% کم‌تر شده است.

تغییر در معماری

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

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

قابلیت‌های Runtime

با اضافه شدن platform-check هنگامی که از vendor/autoload.php استفاده می‌کنید، نسخه‌ی PHP و افزونه‌های آن بررسی می‌شود و انتظار می‌روز تا با نسخه‌ی مورد نیاز وابستگی‌ها هماهنگ باشد. این قابلیت به‌طور پیش‌فرض فعال است بنابراین برای جلوگیری از خطاها و مشکل‌های احتمالی، مستندات این قابلیت را مطالعه کنید.

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

اگر کدهای شما به هر یک از این قابلیت‌های Runtime نیاز داشته باشند می‌بایست "composer-runtime-api": "^2.0" را در composer.json پروژه خود require کنید. این یک پکیج virtual است که توسط Composer ارائه شده و باعث می‌شود تا توسعه‌دهندگان دیگر برای استفاده از پکیج‌های شما Composer 2.x را نصب کنند.

پیشرفت در گزارش خطاها

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

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

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

composer update vendor/package:1.0.*

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

 update --with vendor/package:1.0.*

استفاده کنید.

ارتقا آسان

هدف تیم توسعه‌ی Composer این بوده که همه‌ی کاربران بتوانند این ابزار را به‌راحتی و به سرعت به‌روزرسانی کنند زیرا مزیت‌های آن بسیار است. بنابراین برای ارتقا آسان این نرم‌افزار موارد زیر درنظر گرفته شده است:

  • Composer 2 هنوز هم مانند Composer 1.x از PHP نسخه‌ی 5.3 پشتیبانی می‌کند.
  • فایل‌های composer.lock بین نسخه‌های مختلف قابل استفاده است، بنابراین می‌توانید Composer را ارتقا دهید و درصورت نیاز به نسخه‌ی قبل برگردانید.
  • اکثر دستور‌ها و ورودی‌ها ثابت مانده‌اند و آنچه از Composer می‌دانید نیز در نسخه‌ی 2 آن حفظ شده است.

تیم توسعه‌ی Composer سعی کرده همه‌ی افراد به‌راحتی امکان استفاده و آزمایش نسخه‌ی جدید را داشته باشند. اگر شما دستور composer self-update را در Composer 1.x اجرا کنید به شما هشدار داده می‌شود که یک نسخه‌ی جدید و پایدار در دسترس است که با دستور composer self-update --2 می‌توانید به آن مهاجرت کنید. همچنین اگر با مشکلی روبرو شدید می‌توانید به‌راحتی با دستور composer self-update --1 به نسخه‌ی قبل برگردید.

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

آیا پس از اجرای دستور self-update، با خطای Command "self-update" is not defined. روبرو شده‌اید؟ این خطا می‌تواند به این دلیل باشد که Composer را با package manager سیستم‌عامل خود نصب کرده‌اید و ممکن است دستور self-update برای شما در دسترس نباشد.

با دستور which composer، مسیر نصب این ابزار را پیدا کنید. فرض می‌گیریم که مسیر/usr/bin/composer، مسیری باشد که Composer در آن نصب شده است. حال اسکریپت نصب را با اضافه کردن --install-dir /usr/bin --filename composer اجرا می‌کنیم تا مسیر نصب برنامه تصحیح شود.

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

شاید برخی موارد در روند به‌روزرسانی برای شما مشکل‌ساز شوند:

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

اگر می‌خواهید در این زمینه بیشتر بدانید توصیه می‌شود حتما راهنمای UPGRADE را بخوانید.

قابلیت‌های بعدی

پس از انتشار نسخه‌ی جدید Composer، هنوز roadmap دقیقی برای قابلیت‌های آینده وجود ندارد زیرا قابلیت‌های زیادی اضافه شده است اما یک چیز مهم که باید به آن بپردازیم، پشتیبانی از PHP است. Composer 2.0 از PHP +5.3 پشتیبانی می‌کند و این نسخه از PHP بسیار قدیمی است که نگهداری کدها را دشوارتر می‌کند اما برنامه‌ی آینده به این شکل است که پشتیبانی از نسخه‌های قدیمی PHP برداشته شود.

Composer 2.1 هنوز هم از PHP 5.3 پشتیبانی می‌کند اما حداکثر از نسخه‌ی 2.2 به بعد Composer، پشتیبانی از نسخه‌های قبل از PHP 7.1.3 برداشته می‌شود. طبق آمار بیش از ۹۰ درصد کاربران Composer از آخرین نسخه‌ی PHP استفاده می‌کنند اما تیم توسعه‌ی Composer همچنان به رفع اشکال‌های امنیتی در محدوده‌ی نسخه‌های 2.0.x یا 2.1.x خواهد پرداخت.

با وجود اینکه Composer 1.x نسخه‌ی قدیمی به حساب می‌آید اما هنوز هم به‌روزرسانی‌های مختلفی برای مشکل‌های اساسی دریافت خواهد کرد اما هدف کاربران باید مهاجرت به نسخه‌ی 2.x باشد.

منبع: https://blog.packagist.com/composer-2-0-is-now-available