در پروژهٔ PHP، با وجود composer.lock، فرمان composer install نسخههای ثبتشده را نصب میکند. composer update دوباره وابستگیها را بر اساس محدودیتها حل میکند و قفل را مینویسد. برای بازسازی نسخهٔ آزمایششدهٔ برنامه، فایل قفل همان نسخه را همراه کد نگه دارید و نصب را در محیط آزمایشی بررسی کنید.
۱. سه جزء وابستگی را بشناسید
| جزء | کاربرد |
|---|---|
composer.json |
نام و محدودهٔ نسخهٔ وابستگیها و تنظیمات پروژه. |
composer.lock |
نسخهٔ حلشدهٔ وابستگیهای مستقیم و غیرمستقیم در یک اجرای مشخص. |
vendor/ |
بستههای نصبشده و فایلهای تولیدی مانند autoload.php. |
در یک برنامهٔ قابل استقرار، فایل قفل را همراه تغییرات کد در کنترل نسخه ثبت کنید. وقتی کتابخانه میسازید، برنامهٔ مصرفکننده گراف وابستگی خودش را حل میکند. قفل کتابخانه میتواند برای توسعهٔ خود کتابخانه مفید باشد، ولی نسخههای مصرفکننده را تحمیل نمیکند.

۲. با قفل موجود نسخه را بازسازی کنید
- در کپی آزمایشی نسخهٔ موردنظر، وجود composer.json و composer.lock همان بازبینی را کنترل کنید.
- نسخهٔ PHP و Composer را در همان محیط اجرا بررسی کنید. ابتدا فایل پروژه، scripts و افزونههای مجاز آن را بازبینی کنید.
- برای مرور تغییرات پیشنهادی بدون نصب، فرمان پایین را اجرا کنید. بررسی نهایی به نصب و آزمون برنامه در محیط آزمایشی نیاز دارد.
composer install --dry-run --no-plugins --no-scripts
دو گزینهٔ آخر برای مرور ایزوله مفیدند. فرایند واقعی پروژه ممکن است به افزونه یا اسکریپت مورد اعتماد نیاز داشته باشد. قبل از فعالکردن آنها محتوا و نیازشان را بررسی کنید. اگر قفل موجود نباشد، install میتواند وابستگیها را حل کند و قفل تازه بسازد. ابتدا مشخص کنید باید قفل از کنترل نسخه برگردد یا عمداً برای پروژهای تازه ساخته شود.
۳. تغییر نسخه را در شاخهٔ جدا بررسی کنید
- علت تغییر را مشخص کنید. برای نمونه، رفع نقص مشخص یا سازگاری با نسخهٔ جدید PHP.
- محدودیت نسخه را مرور کنید و در شاخهٔ آزمایشی بهروزرسانی بستهٔ موردنظر را بررسی کنید. بهروزرسانی جزئی میتواند به تغییر بعضی وابستگیهای آن نیاز داشته باشد.
- تفاوت composer.json و composer.lock را بخوانید، نیازمندی محیط را بررسی کنید و آزمون برنامه را اجرا کنید. سپس جفت کد و قفل تأییدشده را به فرایند انتشار پروژه بسپارید.
برای برگشت، نسخهٔ کامل قبلی شامل کد، فایل قفل و artifact وابستگیها را از مسیر استقرار موجود برگردانید. فقط جایگزینی فایل قفل، پوشهٔ vendor قبلی را بازسازی نمیکند.
۴. نتیجهٔ آزمایش محلی
در یک مخزن تمرینی، بستهٔ demo/client نسخهٔ ۱ به demo/core ^1.0 نیاز داشت. Composer نسخهٔ ۱٫۰٫۰ هر دو بسته را در قفل ثبت کرد. اجرای install بعدی روی همان پروژه، محتوای فایل قفل را بایت به بایت حفظ کرد.
اگر هنگام install هشدار ناسازگاری composer.json و composer.lock میبینید، اختلاف تغییرات همان نسخه را بررسی کنید. اجرای update گسترده برای خاموشکردن هشدار میتواند تغییرات بیشتری وارد کند.
۵. مطالعهٔ مرتبط
- PHP و MySQL چیست و چه ربطی به سایت من دارند؟
- رفع خطای Cannot find module در Node.js؛ مسیر یا وابستگی؟
۶. منابع و روش بررسی
منابع در ۱۳ نوامبر ۲۰۲۶ بررسی شدند. مثال در پوشهٔ محلی ویندوز با PHP ۸.۵.۱۲ و Composer ۲.۱۱.۲ اجرا شد. مخزن تمرینی بستهٔ واقعی دانلود نمیکند و اجرای اسکریپت و افزونه در آزمایش غیرفعال بود.