← Назад к вопросам

Что произойдет, если мы запускаем 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

Таблица сравнения

Действиеinstallupdate
Использует 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

  1. Коммитьте composer.lock: это part of project
git add composer.lock
git commit -m "Update dependencies"
  1. Production: используй install
composer install --no-dev  # Не нужны dev зависимости
  1. Разработка: обновляй когда нужно
composer update  # Обновляет версии
  1. Проверяй обновления перед push
composer update --dry-run  # Посмотри, что обновится

Вывод

composer install + composer.lock = reproducible версии (одинаково везде). composer update = обновление версий. Для production всегда используй install (безопаснее), для разработки update когда нужны новые версии.