更新到 Laravel 7 php artisan 后不工作

After update to Laravel 7 php artisan not working

根据文档升级 Laravel 到 v7 我 运行 作曲家更新后。然后我得到这个:

Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 255

这是我的 composer.json 文件:

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "guzzlehttp/guzzle": "^6.5",
        "kitetail/zttp": "^0.6.0",
        "laravel/framework": "^7.0",
        "laravel/tinker": "^2.0",
        "laravel/telescope": "^2.1",
        "laravelcollective/html": "^6.0",
        "livewire/livewire": "^0.7.4",
        "spatie/laravel-html": "^2.24",
        "spatie/laravel-permission": "^3.0.0"
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.2",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "laravel/ui": "^2.0",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^4.1",
        "phpunit/phpunit": "^7.5"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\Foundation\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}

我现在很困惑。甚至 php artisan 似乎在这个项目中没有做任何事情。在其他项目中,它工作正常。知道如何解决这个问题吗?

编辑:部分答案提供了建议。我使用 Laragon 得到以下信息:

PS C:\laragon\www\attila> composer update
Updating dependencies (including require-dev)
Package operations: 0 installs, 4 updates, 0 removals
  - Updating laravel/framework (v7.0.1 => v7.0.2): Downloading (100%)
  - Updating spatie/laravel-permission (3.10.1 => 3.11.0): Downloading (100%)
  - Updating laravel/ui (v2.0.0 => v2.0.1): Downloading (100%)
  - Updating nunomaduro/collision (v4.1.1 => v4.1.2): Downloading (100%)
Package moontoast/math is abandoned, you should avoid using it. Use brick/math instead.
Writing lock file
Generating optimized autoload files
> @php artisan package:discover --ansi
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 255
PS C:\laragon\www\attila> php artisan package:discover --ansi
PS C:\laragon\www\attila>

您必须删除旧文件(缓存)。此命令应该有效:

cd bootstrap/cache/
rm -rf *.php
composer update

如果您使用的是普通用户,请在每个命令前添加 sudo

试试这个:

cd bootstrap/cache/
rm -rf *.php

然后再composer update

在遵循文档中的升级指南后,Laravel Discord 聊天中的一些人指导我更新了 Symfony 5 相关升级。

我也必须删除 telescope(我没有使用)。

删除bootstrapstorage/framework文件夹中的所有缓存后,仍然没有结果。

运行 php artisan --help returns 一些错误,这给了我提示问题出在哪里。

检查 Upgrade Guide 后我解决了这个问题,对我来说是:

  • App\Exceptions\Handler 方法的变化
  • 安装require laravel/ui

对我来说,这是一个非常简单的错误和修复。 7.x 升级文档的相关部分说明如下:

Symfony 5 Related Upgrades Likelihood Of Impact: High

Laravel 7 utilizes the 5.x series of the Symfony components. Some minor changes to your application are required to accommodate this upgrade.

First, the report, render, shouldReport, and renderForConsole methods of your application's App\Exceptions\Handler class should accept instances of the Throwable interface instead of Exception instances:

use Throwable;

public function report(Throwable $exception); 
public function shouldReport(Throwable $exception);
public function render($request, Throwable $exception);
public function renderForConsole($output, Throwable $exception);

相关文件:./App/Exceptions/Handler.php 更改:将 "Exception" 的实例转换为 "Throwable"(编辑器搜索和替换)

所以,基本上,一旦我进行了更改,'php artisan' 又开始工作了。 这包括 OP composer.json(和我的)中的 package:discover 命令。

我试着把它放回 Exception,但 artisan 命令无法执行任何操作。 将 Exception 的出现次数更改为 Throwable,一切正常。 (不过,我的应用程序只定义了前两个函数。)

所以,要注意文档。

如果您在系统上安装 composer 3.x 时出于某种原因正在使用 Laravel 7。使用以下命令:

composer require laravel/ui ^2.0