← Назад к вопросам
Что произойдет, если мы запускаем composer install, а не composer update, и при этом присутствует composer.lock файл?
2.0 Middle🔥 191 комментариев
#Composer и PSR
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
composer install vs composer update с composer.lock
composer install с composer.lock файлом использует точные версии из .lock файла. composer update игнорирует .lock и обновляет на последние версии (в рамках constraint'ов).
Основное поведение
# composer.json:
{
"require": {
"laravel/framework": "^10.0"
}
}
# composer.lock существует и содержит: laravel/framework v10.5.0
composer install
# Устанавливает РОВНО v10.5.0 из .lock файла
# Игнорирует, что есть v10.10.0 доступна
composer update
# Обновляет на v10.10.0 (последняя в диапазоне ^10.0)
# Обновляет composer.lock
Таблица сравнения
| Действие | install | update |
|---|---|---|
| Использует composer.lock? | Да (если есть) | Нет |
| Обновляет версии? | Нет | Да |
| Обновляет .lock? | Нет | Да |
| Скорость | Быстро | Медленнее (проверяет все) |
| Reproducible? | Да (одинаково на всех) | Нет (могут быть разные версии) |
| Для production? | Да | Нет (опасно) |
| Для development? | Да | Да (для обновления зависимостей) |
На практике
# Разработка: обновить зависимости
composer update
# Обновляет на новые версии, обновляет composer.lock
git commit composer.lock
# Коммитим новые версии
# CI/CD или production сервер
composer install
# Устанавливает РОВНО то, что в composer.lock
# Гарантирует одинаковые версии везде
# Специфическое обновление
composer update symfony/console # Обновляет только одну библиотеку
Почему composer.lock критичен?
Сценарий без .lock (плохо):
Week 1: разработчик 1
composer install
↓ устанавливает laravel 10.5.0
Week 2: разработчик 2
composer install
↓ устанавливает laravel 10.10.0 (новая версия)
Проблема: разные версии -> разное поведение -> баги!
Сценарий с .lock (хорошо):
Week 1: разработчик 1
composer install
↓ устанавливает laravel 10.5.0 (из .lock)
Week 2: разработчик 2
composer install
↓ устанавливает laravel 10.5.0 (из .lock)
↓ одинаково!
Best Practices
- Коммитьте composer.lock: это part of project
git add composer.lock
git commit -m "Update dependencies"
- Production: используй install
composer install --no-dev # Не нужны dev зависимости
- Разработка: обновляй когда нужно
composer update # Обновляет версии
- Проверяй обновления перед push
composer update --dry-run # Посмотри, что обновится
Вывод
composer install + composer.lock = reproducible версии (одинаково везде). composer update = обновление версий. Для production всегда используй install (безопаснее), для разработки update когда нужны новые версии.