کامپوزر سه چیز تولید میکند و مرزشان همان چیزی است که تفاوت میان یک استقرار قابل تکرار و یک استقرار تصادفی را میسازد.
composer.jsonچیزی را نگه میدارد که خواستهاید، بهشکل بازه نسخهcomposer.lockچیزی را نگه میدارد که واقعا حل شد، با نسخه دقیق و هش- پوشه بستهها خروجی است و هیچوقت در مخزن نمیرود
دو فایل اول باید در مخزن باشند و همین دومی است که معمولا فراموش میشود. بدون فایل قفل، دو ماشین میتوانند دو نسخه متفاوت بگیرند و هیچجا هم نوشته نشده، و همان است که «روی ماشین من کار میکند» را میسازد.
و دو دستور، که هرکدام جای خودشان را دارند: نصب از روی فایل قفل هیچ چیزی را بهروز نمیکند و همان نسخههای ثبتشده را میآورد، پس همان است که روی سرور اجرا میشود. بهروزرسانی، بازهها را دوباره حل میکند و فایل قفل را مینویسد، پس فقط روی ماشین توسعه و عمدی اجرا میشود.
بارگذاری خودکار، که کار اصلی است
چیزی که کامپوزر بیش از هر چیز دیگری میدهد یک فایل است که همه چیز را وصل میکند: یک require در ابتدای برنامه، و از آن به بعد هر کلاسی که نامش را بنویسید خودش پیدا میشود. این هم برای بستههای بیرونی کار میکند و هم برای کد خودتان، اگر نگاشت فضای نام خودتان را در همان فایل تنظیمات اعلام کرده باشید.
خطای «کلاس پیدا نشد» پس از افزودن یک کلاس تازه، تقریبا همیشه یعنی نقشه بارگذاری خودکار بهروز نشده. تولید دوباره آن یک دستور است و به شبکه نیازی ندارد. جزئیات نگاشت در کلاس، فضای نام، و بارگذاری خودکار است.
محدوده نسخه، و کاری که علامتها میکنند
علامت مد پیش از یک نسخه یعنی تا پیش از نسخه اصلی بعدی، که برای کتابخانهای که نسخهگذاری معنایی را رعایت میکند انتخاب درستی است. قفل کردن روی یک نسخه دقیق در فایل تنظیمات معمولا اشتباه است، چون همان کار وظیفه فایل قفل است و قفل کردن در هر دو جا، بهروزرسانی امنیتی را هم میبندد.
وابستگیهای توسعه در بخش جدایی میروند، یعنی ابزار آزمون و تحلیل ایستا، و روی سرور با یک پرچم اصلا نصب نمیشوند. همان یک پرچم، اندازه پوشه بستهها را روی سرور بهشکل محسوسی کم میکند.
جایی که کار گیر میکند، دانلود از مخزن بستههاست
هر نصب کامپوزر به مخزن اصلی بستهها و به مخزنهای کد وصل میشود و همان مرحله است که از ایران معمولا شکست میخورد یا نصفهکاره میماند. سه چیز در عمل جواب میدهند: تنظیم یک آینه بهعنوان مخزن پیشفرض در فایل تنظیمات کامپوزر، بالا بردن مقدار وقفه زمانی برای بستههای بزرگ، و مهمتر از هر دو، نگه داشتن کش خود کامپوزر و کپی کردنش میان ماشینها. اگر روی سرور استقرار میدهید، بهترین کار این است که پوشه بستهها را روی ماشین توسعه بسازید و همان را منتقل کنید، تا سرور اصلا لازم نباشد به شبکه وصل شود.
ابزار، و سالی که این حرف درست است
در سال ۲۰۲۶ کامپوزر ابزار استاندارد و بیرقیب مدیریت بسته در PHP است، متنباز و رایگان، و جای دانلود دستی کتابخانهها و require کردن فایلبهفایل را گرفته که تا حدود سال ۲۰۱۲ روش رایج بود. برای بررسی اینکه بستههای نصبشده آسیبپذیری شناختهشده دارند یا نه، خود کامپوزر یک دستور بازبینی دارد و به یک پایگاه داده عمومی وصل میشود؛ همین یک دستور باید در خط لوله باشد.
پرسش بعدی این است که همین ایده در زبان دیگری چه شکلی است و مرزهایش کجاست، که نصب کتابخانه، و جدا نگه داشتن پروژهها از هم است. و بزرگترین چیزی که با کامپوزر نصب میشود در مسیریابی، مدل داده، و نظرهای خودِ فریمورک است.