执行php artisan package:discover命令时出现报错求助
php artisan package:discover 报错 "There are no commands defined in the package namespace" 我经常碰到Laravel开发者遇到这个问题,别担心,咱们一步步排查解决:
检查包的服务提供者注册
首先确认你的自定义包或第三方包的Service Provider有没有在config/app.php的providers数组里正确注册。如果是自己开发的包,要手动添加类似YourVendor\YourPackage\YourPackageServiceProvider::class,的条目;要是第三方包,Laravel 5.5+支持自动发现,但如果没生效,手动注册试试。清除Laravel缓存
缓存经常是这类问题的元凶,先执行以下命令清掉各类缓存:php artisan cache:clear php artisan config:clear php artisan route:clear之后再重新运行
php artisan package:discover,看看问题是否解决。验证包的composer配置(自定义包适用)
如果你是自己开发的包,一定要检查composer.json的配置是否正确:autoload部分要正确映射命名空间到源码目录:"autoload": { "psr-4": { "YourVendor\\YourPackage\\": "src/" } }extra部分要指定Laravel的服务提供者:"extra": { "laravel": { "providers": [ "YourVendor\\YourPackage\\YourPackageServiceProvider" ] } }
配置完后运行
composer dump-autoload更新自动加载文件。检查Service Provider类的正确性
确保你的Service Provider正确继承了Illuminate\Support\ServiceProvider,而且没有语法错误。如果包有自定义命令,要在boot()方法里注册它们:public function boot() { if ($this->app->runningInConsole()) { $this->commands([ \YourVendor\YourPackage\Commands\YourCommand::class, ]); } }确认包已正确安装
如果是第三方包,运行composer show看看包是否在已安装列表里。要是没安装,执行composer require vendor/package完成安装后再试。检查版本兼容性
有些第三方包和当前Laravel版本不兼容,去包的官方文档确认支持的Laravel版本,必要时升级/降级包或者Laravel本身。
内容的提问来源于stack exchange,提问作者EketDude

