首页 > 解决方案 > Composer.lock 与生产服务器上实际安装的软件包版本不兼容

问题描述

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

我猜想之前从事该项目的开发人员通过调用开始更新包

composer update 

在他的本地开发环境中。

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

存在PHP版本不兼容的问题以及依赖中的其他错误。

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

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

通过调用:

composer install

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

有没有办法根据生产服务器上当前安装的内容重新生成/恢复 composer.json 和 composer.lock ?不幸的是,此时生产环境中的 composer.lock 并不能完全反映实际安装版本的当前状态。

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

在此先感谢您的帮助!

标签: phplaravelcomposer-php

解决方案


不,没有办法composer.json根据已经安装在/vendor. 您可以查找/vendor/composer/installed.json文件作为所有软件包的已安装版本的参考。

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

  1. 确保您的本地环境与您的生产环境完全相同。如果需要,您composer.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文件。确保 VCS 跟踪您的composer.jsoncomposer.lock文件并修复更改。

推荐阅读