Composer.lock与生产服务器上实际安装的软件包版本不兼容

时间:2018-07-19 06:44:10

标签: php laravel composer-php

我正在开发一个基于PHP7和Laravel的项目。不幸的是,依赖项和软件包版本存在问题。

我猜想以前从事该项目的开发人员通过调用

开始更新软件包
composer update 

在他的本地开发环境中。

因此,已生成一个新的composer.lock文件,所有内容均已推送到生产服务器-但是,尚未在生产中调用composer update命令...

PHP版本不兼容以及相关性中的其他错误。

这是一个非常大的项目,我现在不想迁移到生产服务器上的更高版本。

我目前正在准备一个开发环境,我关心保持所有软件包版本与生产版本的最大兼容性。

通过致电:

composer install

在本地环境中,我收到一系列与软件包版本不兼容有关的错误。

是否有任何方法可以根据生产服务器上当前安装的内容来重新生成/还原composer.json和composer.lock?不幸的是,目前,生产环境中的composer.lock不能完全反映实际安装版本的当前状态。

从生产服务器上的存储库本地重新创建克隆的项目,并保持所有软件包版本(正确的composer.json和composer.lock格式)的完全兼容性的一种安全又好方法是什么?

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

否,无法基于composer.json中已经安装的内容来重新创建/vendor文件。您可以寻找/vendor/composer/installed.json文件作为所有软件包安装版本的参考。

在这种情况下,您需要做的是:

  1. 确保您的本地环境与生产环境完全相同。您也可以使用platform configurationcomposer.json中伪造它。
  2. 您的composer.lock文件没有用。从您的作品中获取/vendor/composer/installed.json文件。删除您的/vendor文件夹。
  3. 运行composer install。写下所有有问题的软件包,并检查Composer提供的解决方案。
  4. 开始针对您的composer.json中的版本降级,以查找由于Composer提供的解决方案而出现问题的软件包。确保自己检查一下这些软件包-开发人员在维护软件包的依赖关系和版本控制方面并不总是很严格。您始终可以只从生产版本的/vendor/composer/installed.json中获取软件包版本,然后将该特定版本放入composer.json中。
  5. 重复步骤3-4,直到最终生成新的composer.lock文件为止。确保您的composer.jsoncomposer.lock文件已被VCS跟踪并修正了这些更改。

答案 1 :(得分:-1)

运行 composer updatecomposer install

您可以使用此代码运行

composer install --ignore-platform-reqs

或更新

composer update --ignore-platform-reqs

我找到了 https://www.wuhaiqiao.com/2020/11/24/329.html