Laravel PackageManifest.php: 未定义索引: name

我只是试图部署我的应用程序,我只是运行我的服务器上的作曲家更新,我得到了以下错误:

在 PackageManifest.php 第122行: 未定义的索引: 名称

我怎样才能解决这个问题?

179214 次浏览

我也有同样的问题。

在我的情况下,降级的作曲家版本修复了这个问题。

他们在2天内更新了作曲家4次-我认为他们的最新更新有问题。

在我的案例中,1.10.1版本是相应的版本。

sudo composer self-update --1

希望能成功。

运行以下命令为我们修复了它

composer self-update --stable

我遇到过这样的问题,也试过 composer self-update --stable,但是没有结果。我发现这个文件属于 Laravel 框架。因此,下面的命令解决了这个问题:

作曲家更新幼虫/框架

作为一个临时修复,尝试这个,它为我工作,在下面的文件:

vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php

查找第116行并注释它:

$packages = json_decode($this->files->get($path), true);

在上面的注释行后面添加两行新的代码:

$installed = json_decode($this->files->get($path), true);
$packages = $installed['packages'] ?? $installed;

我找到了很有帮助的 这期关于作曲家 GitHub 的回购

我将我的 Laravel 框架从5.8更新到5.8.38,按照该问题中显示的表格进行更新,错误消失了。

这个 Laravel 的博客文章也有帮助

如果不能升级 Laravel,那么可以通过运行

composer self-update --1

在我的情况下,降级的作曲家版本修复了这个问题。

sudo composer self-update --1

我遇到了同样的问题,我只是执行命令:

composer update

这将更新 comper.lock 文件。 在那之后,效果非常好。

我也面临同样的问题,我看到我的 Laravel 框架版本是 "laravel/framework": "6.0" 所以只要把盖子放在版本之前,它就会开始工作了。 "laravel/framework": "^6.0"

在我克隆了一个 Laravel 项目并开始安装作曲家之后,我也遇到了同样的问题。然后我在这里读了一些解决方案。在我看来,这是不是一个好主意编辑幼虫芯。但如果只是为了测试,为什么不呢。

在我的情况下,我的解决方案是作曲家更新,而不是作曲家安装。在作曲器更新的情况下,它不使用 poser.lock 文件,而是从 poser.json 更新包。对我和我的特殊情况工程。

运行作曲家升级程序。 我在幼虫7号上就可以了

对于我的 Laravel 5.7项目删除 vendor文件夹和 composer.lock文件固定的问题。

运行以下命令对我来说很有用。也许这会帮助到需要帮助的人。

composer update

Https://github.com/composer/composer/issues/9340#issuecomment-716210369

正如这里所说,你的幼虫版本可能与作曲家2冲突

composer update laravel/framework

应该解决你的问题:

在我的计算机作曲家版本2.0.9已经安装,我有同样的问题时,升级 Laravel 项目。

解决办法是:

  1. 如果存在,则删除项目中的 小贩文件夹。
  2. 作曲家 Json中为 Laravel 版本写这个 "laravel/framework": "^6.0"不要忘记在6.0前面它需要安装 Laravel 6的最新版本
  3. 然后是 composer update

最后,它完美地工作。

运行 composer update对我的 Laravel 5.7项目很有用

将作曲家降级为旧版本:

composer self-update <version>

例如:

composer self-update 1.10.1

我删除了我的供应商文件夹和 comper.lock,然后再次运行 composer install,这解决了我的问题。

某些版本的作曲家给出了这个错误,版本1.10.20没有抛出这个错误

composer self-update 1.10.20
composer install

我更新到作曲家 2.0.11和我有错误。降级到作曲家 1.10.20,它工作得很好,但它非常非常慢。

因此,对于那些像我一样不想改变供应商代码的人来说,仍然希望 Composer abc0知道它是 Laravel 的一种 bug,而 Laravel 已经在小版本(或修补程序)中修复了它。我用的是 Laravel 5.7.9而我的 vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php ->build()是这样的:

if ($this->files->exists($path = $this->vendorPath.'/composer/installed.json')) {
$packages = json_decode($this->files->get($path), true);
}

但是在 Laravel 5.7.29 PackageManifest.php中,同样的文件是固定的:

if ($this->files->exists($path = $this->vendorPath.'/composer/installed.json')) {
$installed = json_decode($this->files->get($path), true);


$packages = $installed['packages'] ?? $installed;
}

同样的情况也发生在 Laravel5.6.0,它有这个错误,并且在 5.6.40Laravel 5.6.40 PackageManifest.php中被修复。我不知道从哪个次要版本已经修复在每个水平,但我建议去最后一个,如 5.7.295.6.40等。或者你可以去看看版本,看看它是否已经修复。

现在作曲家2.0非常非常快。

我有个办法:

  • 删除 vendor文件夹。
  • 运行 composer install

不要用 --no-scripts。这将导致问题,并且不会创建文件 PackageManifest.php和其他文件所需的适当文件夹。

  • 运行 composer update

这样您就不会遇到文件中存在 bug 的问题。

试试这个,它是为我工作,在下面的文件:

供应商/laravel/框架/src/Illumination/Foundation/PackageManifest.php

找到这一行并对其进行注释

$packages = json_decode($this->files->get($path), true);

在上面注释的行后面添加两行新行

$installed = json_decode($this->files->get($path), true);
$packages = $installed['packages'] ?? $installed;

这里有一个适合我的解决方案。《 https://github.com/composer/composer/issues/9340#issuecomment-716210369》 更改您的 laravel 框架为6.18.7,以便与作曲家2兼容

如果要在不进行更新和编曲器更新的情况下进行修复

只要转到供应商/作曲家并删除 installed.json

我最近切换了 作曲家2.0.8和我的 Laravel 版本是 6.20.27

为了解决这个问题:

第一步:

删除 compose.lock文件

第二步:

安装依赖项。

composer install

如果错误是在自我更新编曲器之后发生的,只需将 作曲家替换为 作曲家1。 < br/> 只需更改:

composer install ...

变成:

composer1 install ...

只有这个!

解决这个问题最简单的方法是

从项目中删除 作曲家,锁定文件。

运行 composer install

不需要强制升级您的软件包(不推荐在生产环境下运行 composer update) ,如果您的 Composer 在版本2上,也不需要降级。

如果您的网站需要 Composer v1进行更新(例如,因为 v2会导致错误) ,并且您已经在全球范围内安装了 v2版本,那么最快的解决方案是:

第一步

https://getcomposer.org/download/下载最新的稳定版1.x 作曲家(手动下载)。

第二步

将下载的 作曲家文件放在项目的根目录中(作曲家 Json文件所在的位置)。

第三步

使用 作曲家文件运行命令。示例:

php composer.phar install