Файл композитора.lock отличается на сервере и локально

Я работаю над проектом Laravel.

Я скопировал все файлы, включая файлы composer.json и composer.lock, из репозитория GitLab.

Затем я запускаю команду ниже, чтобы установить все пакеты и их зависимости:

composer install

Теперь все пакеты установлены, и мой проект работает правильно на локальном компьютере.

Но когда я хочу отправить новые изменения в удаленный репозиторий, я обнаружил, что хотя composer.json на локальном и сервере идентичны, но composer.lock файлы разные.

На изображении ниже показана небольшая часть этих различий:

Теперь я волнуюсь, что если я внесу изменения в производственную версию, то у всего проекта возникнут проблемы.

В чем причина разницы в файлах composer.lock?

install не изменяет существующий файл блокировки, если он актуален. Он читает ваш файл блокировки. Если ваш файл блокировки отличается от того, что вы изначально получили из репозитория, это означает, что вы выполнили какую-то другую операцию (например, update или require какой-то другой пакет... и в этом случае имеет смысл, что файл блокировки теперь другой, поскольку ваши зависимости изменились. )
yivi 05.05.2024 10:09

@yivi, кажется, я однажды по ошибке запустил команду composer update. Однако, чтобы избежать ошибки, я еще раз получил файл composer.json из git и удалил файл composer.lock, а затем запустил команду composer install, надеясь решить эту проблему, но различия остались.

Ahmad Badpey 05.05.2024 10:18

Опять же, install не изменяет существующий файл блокировки. Если удалить его, это то же самое, что запустить update.

yivi 05.05.2024 10:21

Возьмите composer.lock из git и запустите install.

Olivier 05.05.2024 10:21

Возможно, это связано с вашим процессом развертывания. Что именно ты делаешь? Перед запуском обязательно проверьте свой проект (включая существующий файл блокировки) в рабочей среде composer install

apokryfos 05.05.2024 10:59

@Оливье, я так и сделал, но теперь получил эту ошибку: Your lock file does not contain a compatible set of packages. Please run composer update., хотя файлы composer.json и composer.lock идентичны своим серверным версиям

Ahmad Badpey 05.05.2024 11:08

Тогда у вас совсем другая проблема. Вы отправили в репозиторий файл блокировки в неправильном состоянии. На самом деле это не имеет отношения к этому вопросу, просто: ваше репо испорчено, вам нужно очистить свои зависимости, запустить тесты, а также зафиксировать и отправить исправленные версии.

yivi 05.05.2024 11:10

Возможно, ваша версия PHP несовместима с версиями пакета, указанными в вашем файле блокировки.

Olivier 05.05.2024 11:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
8
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Команда install не изменяет существующий файл блокировки, если он актуален.

Он читает ваш файл блокировки. Если ваш файл блокировки отличается от того, что вы изначально получили из репозитория, это означает, что вы выполнили какую-то другую операцию (например, update или require какой-то другой пакет... и в этом случае имеет смысл, что файл блокировки теперь другой, поскольку ваши зависимости изменились. ).

Файл блокировки будет отличаться от того, что вы получили из репозитория в трех случаях:

  • Ты побежал update
  • Вы required или removed посылку.
  • Вы удалили файл блокировки и снова запустили install: это то же самое, что и запуск update, поскольку композитор не может определить состояние блокировки для зависимостей, ему просто нужно будет создать новый файл блокировки с нуля, получив последние зависимости.

Если вы непреднамеренно изменили свой файл блокировки и не хотите отправлять другой файл блокировки в исходную версию, просто восстановите изменения в своих composer.* файлах до последней заведомо исправной фиксации, полученной из репозитория.

Другие вопросы по теме