Laravel PackageManifest.php:未定义索引:名称

are*_*ty_ 89 php laravel

我只是想部署我的应用程序,我只是在我的服务器上运行了 composer update ,我收到了以下错误:

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

我该如何解决这个问题?

小智 137

试试这个,它对我有用,在以下文件中:

vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php
Run Code Online (Sandbox Code Playgroud)

找到这一行并评论它:

$packages = json_decode($this->files->get($path), true);
Run Code Online (Sandbox Code Playgroud)

在上述注释行后添加两个新行:

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

  • 这里的问题是我只是不想更改核心文件。 (27认同)
  • 这不是一个很好的解决方案。您不应该这样编辑供应商文件。如果其他人从您的composer.lock.json 安装您的依赖项怎么办? (15认同)
  • 这个解决方案很棒,谢谢兄弟@Pulkit Modi (3认同)
  • 现在运行 Composer update 可以对 PackageManifest.php 进行更改,而无需手动编辑。 (2认同)

小智 105

我有同样的问题,我只是执行命令:

composer update
Run Code Online (Sandbox Code Playgroud)

这将更新 composer.lock 文件。之后,就像一个魅力。

  • @shamaseen,因为您不想在生产环境上运行“composer update”。 (8认同)
  • 这对我不起作用 (5认同)
  • 我不知道为什么人们接受降级 Composer 或更改 Laravel 源文件作为解决方案,尽管这是修复它的正确方法。 (3认同)
  • 这应该是公认的解决方案 (2认同)
  • 这会将您的所有库文件更新为受composer.json 约束的最新版本。您可能愿意也可能不想这样做。https://getcomposer.org/doc/03-cli.md#update-u (2认同)

Dav*_*ogo 41

我发现这个问题的作曲家GitHub库,帮助了很多

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

这篇Laravel 博客文章也有帮助

如果你不能升级 Laravel,你可以通过运行继续使用 Composer 1

composer self-update --1
Run Code Online (Sandbox Code Playgroud)


小智 40

我有同样的问题。在我的情况下,降级作曲家版本解决了这个问题。他们在 2 天内更新了 Composer 4 次 - 我认为他们的最新更新有问题。就我而言,版本 1.10.1 是要使用的版本。

我希望它会起作用。

  • 如果“composer update”无法修复它,这只是一个正确的临时解决方法。降级 Composer 并不是解决方案。 (16认同)
  • 我使用“composer self-update 1.10.20”从 2.0.11 降级到 1.10.20,错误消失了。但我无法更新到composer 2.x.... (4认同)
  • 您可以使用 Composer 更新来代替 Composer 安装。这个对我有用 (3认同)

小智 24

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

$ composer 更新 laravel/framework


小智 17

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

sudo composer self-update --1
Run Code Online (Sandbox Code Playgroud)


tru*_*gnm 13

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

如此处所述,您的 Laravel 版本可能与 composer 2 冲突

composer update laravel/framework
Run Code Online (Sandbox Code Playgroud)

应该可以解决您的问题:D


Bed*_*ang 12

我最近切换了composer 2.0.8,我的 Laravel 版本是6.20.27

要解决此问题:

第1步:

删除compose.lock文件

第2步:

安装依赖项。

composer install
Run Code Online (Sandbox Code Playgroud)

  • @BedramTamang - 我实际上知道这两种情况发生了什么。我实际上是在谈论最后将安装的软件包的版本,因为两者都会安装最新的软件包。 (2认同)

小智 11

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

从项目中删除composer.lock文件。

跑步composer install

  • 警告:这将更新所有包。如果您想避免更新软件包,请转到“vendor/composer”并删除“installed.json” (2认同)

Abr*_*mad 10

我面临着同样的问题。我看到我的 Laravel 框架版本是"laravel/framework": "6.0" 所以只需在版本之前加上上限即可开始正常工作。 "laravel/framework": "^6.0"

  • 看起来这个问题可能有几个不同的原因,每个都有不同的解决方案,但这对我有用。在上下文中,从 5.8 升级,其中每个 .1 都是主要版本更改,但在 6+ 上每个 .1 都是次要版本。因此,锁定到“6.0”或“6.0.*”将其保留在“6.0.4”上,并避免了其余版本更新(当前为“6.20.16”)。此错误存在于“6.0.4”上,但后来被修复。 (2认同)

Sat*_*wat 7

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

composer update
Run Code Online (Sandbox Code Playgroud)


Jos*_*men 7

我删除了我的供应商文件夹和 composer.lock 并composer install再次运行。这为我解决了它。


Ash*_* KS 6

某些版本的composer会出现此错误,1.10.20版本不会抛出此错误

composer self-update 1.10.20
composer install
Run Code Online (Sandbox Code Playgroud)


小智 5

composer update使用 Laravel 5.7运行我的项目

  • 这可能是正确的答案,但另一个用户已经发布了类似的内容。撰写新答案时,请尝试包含其他答案没有的附加信息或示例。 (2认同)