为什么在空的 Laravel 项目中尝试运行 Composer Update 时出现致命错误?

问题描述 投票:0回答:1

我创建了新的 laravel 项目,运行

composer update
并收到此错误:

> @php artisan package:discover

Fatal error: Uncaught Error: Call to undefined method Composer\Repository\PlatformRepository::isPlatformPackage() in /var/www/app/vendor/composer/composer/src/Composer/Json/JsonManipulator.php:139
Stack trace:
#0 /var/www/app/vendor/composer/composer/src/Composer/Json/JsonManipulator.php(163): Composer\Json\JsonManipulator->Composer\Json\{closure}('php')
#1 [internal function]: Composer\Json\JsonManipulator->Composer\Json\{closure}('php', 'matviib/telegra...')
#2 /var/www/app/vendor/composer/composer/src/Composer/Json/JsonManipulator.php(164): uksort(Array, Object(Closure))
#3 /var/www/app/vendor/composer/composer/src/Composer/Json/JsonManipulator.php(119): Composer\Json\JsonManipulator->sortPackages(Array)
#4 /var/www/app/vendor/php-http/discovery/src/Composer/Plugin.php(445): Composer\Json\JsonManipulator->addLink('require', 'php-http/messag...', '*', true)
#5 /var/www/app/vendor/php-http/discovery/src/Composer/Plugin.php(176): Http\Discovery\Composer\Plugin->updateComposerJson(Array, true)
#6 [internal function]: Http\ in /var/www/app/vendor/composer/composer/src/Composer/Json/JsonManipulator.php on line 139

这个错误的原因是什么?看起来 Composer 代码内部有些问题,所以我什至不知道该怎么处理。

php composer-php
1个回答
0
投票

当 Composer 及其依赖项之间存在版本不匹配时,通常会发生此错误,特别是当将旧版本的 Composer 与需要更新 Composer 功能的新包一起使用时。

  1. Composer 版本兼容性:

您使用的Composer版本可能与composer.json中定义的包不兼容。通过运行确保您使用的是最新版本的 Composer:

composer self-update

2.Composer 缓存问题:

清除 Composer 缓存可以解决与损坏的缓存文件相关的问题。您可以通过运行来做到这一点:

composer clear-cache

3.损坏的供应商目录:

有时,供应商目录可能会损坏。尝试删除vendor目录和composer.lock文件,然后再次运行安装命令:

rm -rf vendor
rm composer.lock
composer install

为了防止将来出现类似问题:

  1. 始终在composer.json中指定确切的版本,而不是使用通配符
  2. 定期更新 Composer
  3. 使用composer.lock锁定依赖版本
© www.soinside.com 2019 - 2024. All rights reserved.