在 Laravel 6 中,执行命令:php artisan telescope:publish,报错:There are no commands defined in the “telescope” namespace.

1、在 Laravel 6 中,执行命令:php artisan telescope:publish,报错:There are no commands defined in the “telescope” namespace.。如图1

图1

PS E:\wwwroot\object> php artisan telescope:publish


  There are no commands defined in the "telescope" namespace.


2、查看 composer.json,laravel/telescope 存在于 require-dev 中。

    "require-dev": {
        "allure-framework/allure-phpunit": "^1.3",
        "barryvdh/laravel-debugbar": "^3.6",
        "beyondcode/laravel-dump-server": "^1.0",
        "beyondcode/laravel-er-diagram-generator": "^1.4",
        "brianium/paratest": "^2.0",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "laravel/telescope": "^2.1",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^3.0",
        "phpunit/phpunit": "^7.5",
        "squizlabs/php_codesniffer": "^3.5"
    },

3、查看目录 /config,已经存在文件 telescope.php,文件:/app/Providers/TelescopeServiceProvider.php 已存在。但是目录 /public/vendor/telescope 不存在。

4、访问:https://object.local/telescope ,报错:RuntimeException
The Telescope assets are not published. Please run: php artisan telescope:publish 。如图2

图2

5、要查看所有可用的 Artisan 命令的列表,使用 list 命令。其中不存在 telescope

6、查看文件 /app/Providers/AppServiceProvider.php,在 AppServiceProvider 的 register 方法中未手动注册服务,存在如下代码

        // 流水线运行调用artisan命令的时候会进入到此逻辑,如果日常开发需要使用,在开发时候可以屏蔽这个逻辑
        if ($this->app->isLocal() && !$this->app->runningInConsole()) {
            $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
            $this->app->register(TelescopeServiceProvider::class);
        }

7、删除掉 !$this->app->runningInConsole() 后,再次执行:php artisan telescope:publish,执行成功。如图3

图3

        // 流水线运行调用artisan命令的时候会进入到此逻辑,如果日常开发需要使用,在开发时候可以屏蔽这个逻辑
        if ($this->app->isLocal()) {
            $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
            $this->app->register(TelescopeServiceProvider::class);
        }
PS E:\wwwroot\object> php artisan telescope:publish
Publishing complete.
Copied Directory [\vendor\laravel\telescope\public] To [\public\vendor\telescope]
Publishing complete.

8、再次访问:https://object.local/telescope ,响应 200。

永夜