以前的开发人员似乎搞砸了 composer ,现在在我运行composer dump-autoload
之后应用程序坏了。
这是一个无法访问互联网的旧版内部应用程序,因此我无法将文件复制到其中。
现在我得到了以下错误:
在C:\项目\供应商\guzzlehttp\guzzle\src\Client.php中未找到接口“Psr\Http\客户端\客户端接口”
我所知道的是,所有正确的文件确实存在,这个包确实工作,因为每当我复制备份供应商文件夹它再次工作。
在composer.json
的require
密钥中也有"guzzlehttp/guzzle: "^7.2"
虽然当我运行composer dump-autoload
时,它没有在Discovered packages
列表中显示guzzlehttp
(但我不确定它是否应该显示它?如果是,那么它可能与问题有关)
没有互联网连接,如何手动修复?
这是纯粹的composer
相关的错误,我可以尝试通过编辑vendor/composer
文件夹中的文件来修复它吗?或者我还需要添加一些代码到Laravel项目本身,也许在配置文件中的某个地方?
更新1:我使用git比较了使用composer dump-autoload
前后的vendor
文件夹,发现composer
中的所有文件都发生了变化,除此之外没有其他变化。
然后我注意到可能导致这个问题的有问题的行:
在composer/autoload_classmap.php
和composer/autoload_static.php
中,缺少的'Psr\Http\Client\ClientInterface'
都消失了。
在运行自动加载之前,autoload_classmap.php
中有以下行:
'Psr\\Http\\Client\\ClientInterface' => $vendorDir . '/psr/http-client/src/ClientInterface.php'`
这个是autoload_static.php
的:
'Psr\\Http\\Client\\ClientInterface' => __DIR__ . '/..' . '/psr/http-client/src/ClientInterface.php'`
当我将psr/http-client
添加到composer.json的require
中时,它没有做任何事情
更新2:手动将缺少的两行添加到autoload_static.php
和autoload_classmap.php
后,软件包正在添加。
那么为什么composer dump-autoload
一开始就把它们删除了呢?我把psr/http-client
加到composer.json
上了。或者可能这还不够,我需要添加另一个包?
更新3:是否与composer版本有关?我知道所有内容都是使用composer 1.x安装的,而我使用composer 2.4运行了composer dump-autoload
命令
1条答案
按热度按时间2cmtqfgy1#
1.将应用程序置于版本控制之下,* 包括 * 供应商文件夹(以其工作的形式)。
1.在一个可以上网的盒子上 checkout 那个修订版。
1.修复项目。
1.测试更改并确认它们适用于目标平台。
1.使用更改创建新的项目修订。
1.在新修订版本之外创建一个工件。
1.在无法访问Internet的删除系统上部署对象。
1.测试更改并确认它们在生产系统上工作。