php - Composer.lock 与生产服务器上实际安装的软件包版本不兼容
问题描述
我正在开发一个基于 PHP7 和 Laravel 的项目。不幸的是,依赖项和包版本存在问题。
我猜想之前从事该项目的开发人员通过调用开始更新包
composer update
在他的本地开发环境中。
因此,已经生成了一个新的 composer.lock 文件,并且所有内容都已推送到生产服务器 - 但是,尚未在生产服务器上调用 composer update 命令...
存在PHP版本不兼容的问题以及依赖中的其他错误。
这是一个非常大的项目,我现在不想迁移到生产服务器上的更高版本。
我目前正在准备一个开发环境,我关心保持所有包版本与生产环境的最大兼容性。
通过调用:
composer install
在本地环境中,我收到了一系列与软件包版本不兼容相关的错误。
有没有办法根据生产服务器上当前安装的内容重新生成/恢复 composer.json 和 composer.lock ?不幸的是,此时生产环境中的 composer.lock 并不能完全反映实际安装版本的当前状态。
什么是从生产服务器上的存储库本地重新创建克隆项目并保持所有包版本的完全兼容性、composer.json 和 composer.lock 的正确形式的安全且好方法?
在此先感谢您的帮助!
解决方案
不,没有办法composer.json
根据已经安装在/vendor
. 您可以查找/vendor/composer/installed.json
文件作为所有软件包的已安装版本的参考。
在这种情况下,您需要做的是:
- 确保您的本地环境与您的生产环境完全相同。如果需要,您
composer.json
也可以使用平台配置来伪造它。 - 你的
composer.lock
文件没有用。从您的生产中获取/vendor/composer/installed.json
文件。删除您的/vendor
文件夹。 - 运行
composer install
。写下所有有问题的包并检查 Composer 提供的解决方案。 composer.json
根据 Composer 提供的解决方案,开始降级您的软件包中存在问题的版本。请务必自己查看这些包 - 开发人员并不总是对他们维护包的依赖关系和版本控制的方式非常严格。您始终可以从生产环境中获取软件包版本/vendor/composer/installed.json
,并将该特定版本放在您的composer.json
.- 重复步骤 3-4,直到您最终可以生成新
composer.lock
文件。确保 VCS 跟踪您的composer.json
和composer.lock
文件并修复更改。
推荐阅读
- mongodb - 匹配数组中的多个条件
- javascript - 如何检查javascript对象是否为空?
- c# - 如何使用 Rotativa 在 PDF 上打印使用谷歌地图 API 的地图?
- python - 解绑 Window.grab_mouse
- javascript - 主应用程序组件找不到将 Vue 组件移动到单独的文件中
- r - 在 shinyapps.io 中运行 gmailr
- django - 带有 ModelChoiceField 和查询过滤器的 Django ModelForm
- php - 有没有办法将 HeaderField 添加到 silvershop-Core 中的 Shipping 和 Billing 表单字段
- static - Django - 从模板加载目标文件
- ios - 如何使云 Firestore auth Uid 匹配用户 ID?