【问题标题】:Laravel PackageManifest.php line 131: Undefined index: nameLaravel PackageManifest.php 第 131 行:未定义索引:名称
【发布时间】:2021-02-13 15:38:58
【问题描述】:

我用这个命令更新了作曲家:

composer self-update

已更新至 2.0.4 版。然后当我尝试使用以下命令启动我的 Laravel 项目时:

php artisan serve

我收到了这个错误:

In PackageManifest.php line 131:

 Undefined index: name

我尝试通过以下方式恢复作曲家的旧版本:

composer self-update --rollback

composer 已降级到 1.9.3 版,但对错误没有帮助。 然后我用这个命令再次更新作曲家:

composer self-update --stable

仍然出现同样的错误。

这是 PackageManifest.php 文件的第 131 行:

return [$this->format($package['name']) => $package['extra']['laravel'] ?? []];

【问题讨论】:

  • 在使用composer self-update更新composer版本后,您是否在运行php artisan serve之前尝试再次运行composer update
  • 不,我现在应该试试吗?
  • 是的,你应该这样做。
  • 首先,您应该在使用composer self-update后再次检查版本。然后,您尝试composer update。最后,运行php artisan serve
  • 这就是我所缺少的!有效!非常感谢!

标签: php laravel composer-php


【解决方案1】:

首先,您应该在使用composer self-update 后再次检查版本。然后,您尝试composer update。最后,运行php artisan serve

【讨论】:

    【解决方案2】:

    问题是 Laravel 默认供应商软件包之一有一个小错误。

    解决方法如下:

    rm -rf composer.lock
    rm -rf vendor
    composer install
    

    这会将作曲家包更新为您当前版本的 laravel 的最新版本,这应该可以解决问题。

    【讨论】:

      【解决方案3】:

      将 Illuminate\Foundation\PackageManifest.php 中的代码添加到第 129 行:

          ...
          $ignoreAll = in_array('*', $ignore = $this->packagesToIgnore());
          // ------------------:::::::::FIX::::::::::------------
          if (isset($packages['packages'])){
              $packages = $packages['packages'];
          }
          // ---------------------------ENDFIX-------------------
          $this->write(collect($packages)->mapWithKeys(function ($package) {
          ...
      

      【讨论】:

      • 当然。但有时我们需要忽略规则,因为生活比规则更复杂。这是其中一种情况。此修复使作曲家也可以更新圣供应商文件夹。您可以比这更好地发布您的决定。
      • 那么有一天你会因为你做了一些愚蠢的事情而无视规则而摸不着头脑。该解决方案已从@advertmanagerpro.com 发布到此处
      • 他提供斧头,我提供手术刀,两种工具都能解决问题,选择权在用户
      • 这对我有用,虽然我的编辑是在第 121 行而不是第 129 行完成的
      • 我同意@Snapey,你不应该直接在供应商文件夹中更改代码。因为一旦您进行作曲家更新或尝试安装新的作曲家包,您很可能会丢失它。另外,大多数人在 .gitignore 文件中都有 vendor 文件夹,因此 vendor 文件夹永远不会保存到 github 或类似的备份存储库中。在供应商文件夹中进行更改是不好的做法。
      【解决方案4】:

      这实际上已在 Laravel 中修复,因此请确保将 Laravel 更新到至少 6.18.7+ 或 7.6.0+ 或 8.0+

      仅供参考,如果您删除 composer 本地文件,它将更新您的所有依赖项,所以这不是一个好主意。

      通过运行命令composer update laravel/framework 应该有望解决问题并且不会导致任何其他问题。如果您无法更新 Laravel,那么您最好使用 composer self-update --1 降级到 Composer 1。

      如果您使用的是illuminate/foundation 而不是laravel/framework,请确保您使用的是composer update illuminate/foundation

      【讨论】:

      • 这对我有帮助:使用 composer self-update --1 降级到 Composer 1
      • 将作曲家降级到版本 1(生产服务器上的相同版本)是最好的解决方案。拥有本地环境的全部目的是尽可能类似于生产。谢谢!
      【解决方案5】:

      选项 1:

      打开 供应商/laravel/framework/src/Illuminate/Foundation/PackageManifest.php

      然后搜索代码:

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

      插入

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

      选项 2:

      运行命令

      composer update
      

      【讨论】:

        【解决方案6】:

        这对我有帮助:

        降级到 Composer 1 使用

        composer self-update --1 
        

        【讨论】:

          猜你喜欢
          • 2020-07-25
          • 2021-05-01
          • 2012-02-11
          • 2021-02-13
          • 1970-01-01
          • 1970-01-01
          • 2016-05-25
          • 2020-12-29
          • 2018-11-26
          相关资源
          最近更新 更多