Laravel PackageManifest.php:未定义索引:名称
Posted
技术标签:
【中文标题】Laravel PackageManifest.php:未定义索引:名称【英文标题】:Laravel PackageManifest.php: Undefined index: name 【发布时间】:2020-07-25 10:16:22 【问题描述】:我只是试图部署我的应用程序,我刚刚在我的服务器上运行了 composer update 并且我收到了以下错误:
在 PackageManifest.php 第 122 行: 未定义索引:名称
我该如何解决这个问题?
【问题讨论】:
我遇到了同样的问题,但在我的本地环境(docker)上。我通过在 docker 容器外使用 composer update 来修复它,所以基本上使用安装在我的 Mac 上的 php 和 composer。如果您使用 docker,您可以尝试做同样的事情,也许不是修复它的最佳方法,但它确实有效。 :) 我在下面尝试了很多答案,但只有 ***.com/questions/61177995/… 对我有用。 【参考方案1】:我遇到了同样的问题。 在我的情况下,降级作曲家版本解决了这个问题。 他们在 2 天内更新了 Composer 4 次——我认为他们的最新更新有问题。 就我而言,版本 1.10.1 是要使用的版本。
我希望它会起作用。
【讨论】:
你是怎么降级的? 如果composer update
没有修复它,这只是一个正确的临时解决方法。降级 Composer 不是解决方案。
我使用 composer self-update 1.10.20
从 2.0.11 降级到 1.10.20 并且错误消失了。但我无法更新到 composer 2.x....
您可以使用 composer update 代替 composer install。它对我有用
作曲家自我更新 --1 ...这个命令帮助了我【参考方案2】:
运行以下命令为我们修复了它
composer self-update --stable
【讨论】:
这对我不起作用。我收到了消息You are already using composer version 2.0.4 (stable channel).
【参考方案3】:
我遇到了这样的问题,也试过composer self-update --stable
,但是没有结果。所以,我发现这个文件属于 Laravel 框架。所以下面的命令解决了这个问题:
$ composer 更新 laravel/framework
【讨论】:
恐怕这对我不起作用。我仍然遇到同样的错误:In PackageManifest.php line 122: Undefined index: name
这对我有用,我更喜欢它而不是更新所有包【参考方案4】:
作为临时修复,试试这个,它对我有用,在以下文件中:
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;
【讨论】:
这里的问题是我只是不想更改核心文件。 这个解决方案很棒,谢谢兄弟@Pulkit Modi 这不是一个很好的解决方案。您不应该像那样编辑供应商文件。如果其他人从您的 composer.lock.json 安装您的依赖项怎么办? 最好在开发环境中进行临时修复 运行 composer update 现在可以对 PackageManifest.php 进行更改,无需手动编辑。【参考方案5】:我发现 this issue on the composer GitHub repo 很有帮助
我按照该问题中显示的表格将我的 Laravel 框架从 5.8 更新到 5.8.38,错误消失了。
这个Laravel blog post 也有帮助
如果你无法升级 Laravel,你可以通过运行继续使用 Composer 1
composer self-update --1
【讨论】:
当我将 Laravel 5.5 升级到 6.x 时,这个回复对我有用 使用composer self-update --rollback 返回2.0.13版本 也适合我【参考方案6】:在我的情况下,降级作曲家版本解决了这个问题。
sudo composer self-update --1
【讨论】:
【参考方案7】:我遇到了同样的问题,我只是执行命令:
composer update
这将更新 composer.lock 文件。 之后就像一个魅力。
【讨论】:
我不知道为什么人们接受降级作曲家或更改 Laravel 的源文件作为解决方案,而这是解决问题的正确方法。 @shamaseen 因为您不想在生产环境中运行“composer update”。 这会将您的所有库文件更新为受 composer.json 约束的最新版本。你可能想也可能不想这样做。 getcomposer.org/doc/03-cli.md#update-u 这应该是公认的答案。无需编辑任何文件即可工作! 这可行,情况是所有依赖项都将更新到最新版本,并且可能某些脚本会中断,因此请考虑到这一点。【参考方案8】:我遇到了同样的问题。我看到我的 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”但之后修复。 我也遇到了同样的问题,但无法通过应用此处列出的几乎所有解决方案来解决它。但是,这个解决方案在我身上触发了一些东西,我再次检查了我的框架版本,发现它输入错误(我前一天正在测试一些东西)。我输入了正确的框架编号,问题立即消失了。谢谢!【参考方案9】:克隆 laravel 项目并开始 composer install 后,我遇到了同样的问题。然后我在这里阅读了一些解决方案。在我看来,编辑 laravel 内核并不是一个好主意。但如果只是为了测试,为什么不呢。
我的解决方案是作曲家更新而不是作曲家安装。在 composer update 的情况下,它不使用 composer.lock 文件并从 composer.json 更新包。对我来说,在我的特殊情况下有效。
【讨论】:
【参考方案10】:运行作曲家升级。 在 laravel 7 上为我工作
【讨论】:
【参考方案11】:对于我的Laravel 5.7
项目,删除vendor
文件夹和composer.lock
文件解决了这个问题。
【讨论】:
【参考方案12】:运行以下命令对我有用。也许这会帮助有需要的人。
composer update
【讨论】:
【参考方案13】:https://github.com/composer/composer/issues/9340#issuecomment-716210369
如此处所述,您的 laravel 版本可能与 composer 2 冲突
composer update laravel/framework
应该可以解决你的问题:D
【讨论】:
谢谢!!!我必须在某个时候更新到 Composer 2,但仍在这个 repo 中运行 Laravel 6.0。我需要进行大量手动升级才能使其正常工作。但你指出的绝对是我的问题。谢谢。【参考方案14】:在我的电脑上安装了 composer 2.0.9 版本,我在升级 laravel 项目时遇到了同样的问题。
解决办法是:
-
删除项目中的 Vendor 文件夹(如果存在)。
在 composer.json 里面为 laravel 版本写这个
"laravel/framework": "^6.0"
不要忘记 ^ 在 6.0 前面它需要安装最新版本的 laravel 6
然后composer update
终于,完美运行了。
【讨论】:
如果您正在增加框架版本,请不要忘记访问 Laravel 文档升级指南。 laravel.com/docs/6.x/upgrade【参考方案15】:Running composer update
为我的 Laravel 5.7 项目工作
【讨论】:
这可能是正确的答案,但另一个用户已经发布了类似的内容。撰写新答案时,请尝试包含其他答案所没有的其他信息或示例。【参考方案16】:要将作曲家降级到旧版本:
composer self-update <version>
例子:
composer self-update 1.10.1
【讨论】:
【参考方案17】:我删除了我的供应商文件夹和 composer.lock 并再次运行 composer install
。这为我解决了。
【讨论】:
【参考方案18】:composer部分版本报此错误,1.10.20版本不报此错误
composer self-update 1.10.20
composer install
【讨论】:
请在您的答案中添加一些解释,以便其他人可以从中学习【参考方案19】:我更新到 Composer 2.0.11
,但我遇到了错误。已降级为 Composer 1.10.20
,效果很好,但速度非常慢。
所以对于像我这样不想更改供应商代码但仍希望 Composer 2.0.x
的人来说,这是 Laravel 中的一种错误,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;
同样适用于有错误的 Laravel 5.6.0
,并在 5.6.40
Laravel 5.6.40 PackageManifest.php 中修复。我不知道它是从哪个小版本修复的,但我建议去最后一个,比如5.7.29
、5.6.40
等。或者你可以去看看版本,看看它是否已经修复.
现在 Composer 2.0 非常快。
【讨论】:
【参考方案20】:我有一个解决方案:
删除vendor
文件夹。
运行composer install
不要使用--no-scripts
。这会导致问题,并且不会创建文件PackageManifest.php
和其他人需要的适当文件夹。
composer update
这样您就不会遇到文件中的错误问题。
【讨论】:
【参考方案21】:试试这个,它对我有用,在以下文件中:
vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php
找到这一行并评论它
$packages = json_decode($this->files->get($path), true);
在上面注释的行之后添加两个新行
$installed = json_decode($this->files->get($path), true);
$packages = $installed['packages'] ?? $installed;
【讨论】:
永远不要更改供应商源文件。此更改将在新更新时被覆盖 对我来说仍然没有副作用。 @natghi @AnujShrestha 你是对的。不过,我在更新时没有再次遇到这个问题 这是因为包管理器没有更新那个特定的文件,但是如果他们改变了文件,那么你在供应商文件夹中所做的所有更新都将在下一次作曲家更新时消失。这个问题已经有很多正确的答案了。你的做法只是不好。【参考方案22】:这是一个对我有用的解决方案。 https://github.com/composer/composer/issues/9340#issuecomment-716210369 将您的 laravel 框架更改为 6.18.7,使其与 composer 2 兼容
【讨论】:
【参考方案23】:如果您想在不进行更新和作曲家更新的情况下进行修复
只需转到供应商/作曲家并删除 installed.json
【讨论】:
【参考方案24】:我最近切换了 composer 2.0.8,我的 Laravel 版本是 6.20.27
解决这个问题:
第 1 步:
删除compose.lock
文件
第 2 步:
安装依赖项。
composer install
【讨论】:
这也为我解决了这个问题,无需降级作曲家。我认为这应该是批准的答案。也许降级作曲家也可以解决它,但就我而言,我认为降级不太理想。 我认为这与不删除 composer.lock 文件而只运行 composer update 相同。 @kapitan 不是。composer update
查看 composer.lock 文件并将每个依赖项更新到新版本(如果有新版本可用)。但是 composer install
删除 composer.lock
文件并不关心以前安装的内容,它会安装所有新的 composer.json
文件
@BedramTamang - 我实际上知道这两种情况发生了什么。我实际上是在谈论将在最后安装的软件包的版本,因为两者都将安装最新的软件包。
这一项应该被标记为正确答案。【参考方案25】:
如果错误是在自我更新作曲家之后,只需将 composer 替换为 composer1。只需更改:
composer install ...
进入:
composer1 install ...
就这个!
【讨论】:
【参考方案26】:如果你有 composer version 2,请将你的 laravel 升级到 6.2。
https://github.com/composer/composer/issues/9340#issuecomment-716210369
【讨论】:
【参考方案27】:解决这个问题最简单的方法是
从您的项目中删除 composer.lock 文件。
运行composer install
【讨论】:
谢谢,它对我有用!以上是关于Laravel PackageManifest.php:未定义索引:名称的主要内容,如果未能解决你的问题,请参考以下文章