Laravel切换分支后找不到BeritaServiceProvider类求助
切换到投诉功能分支后,Laravel始终尝试访问归属其他分支的新闻模块,执行
composer dump-autoload、php artisan config:clear、php artisan cache:clear后仍报错:Class "Modules\Berita\Providers\BeritaServiceProvider" not found at vendor\laravel\framework\src\Illuminate\Foundation\Application.php:935 931▕ * @return \Illuminate\Support\ServiceProvider 932▕ */ 933▕ public function resolveProvider($provider) 934▕ { ➜ 935▕ return new $provider($this); 936▕ } 937▕ 938▕ /** 939▕ * Mark the given provider as registered. 1 vendor\laravel\framework\src\Illuminate\Foundation\Application.php:867 Illuminate\Foundation\Application::resolveProvider() 2 vendor\laravel\framework\src\Illuminate\Foundation\ProviderRepository.php:75 Illuminate\Foundation\Application::register()
解决方案
检查服务提供者注册配置
打开config/app.php,找到providers数组,确认是否手动注册了Modules\Berita\Providers\BeritaServiceProvider,如果有直接删除该行。如果使用了nwidart/laravel-modules这类模块管理包,检查config/modules.php里的模块列表,移除Berita模块的配置条目。执行彻底的缓存清理
除了已执行的命令,补充清理路由、视图缓存,并执行全量缓存清理:php artisan route:clear php artisan view:clear php artisan optimize:clearoptimize:clear会一次性清理配置、路由、视图、应用缓存、编译服务提供者等所有缓存文件,比单独执行命令更彻底。清理并重建Composer自动加载
检查composer.json的autoload/autoload-dev节点,确认是否存在Berita模块的命名空间映射,如有则删除。然后执行优化版的自动加载重建:composer dump-autoload -o手动删除编译的服务提供者缓存文件
Laravel会将服务提供者列表编译到bootstrap/cache目录下的文件,直接删除这些文件有时比命令清理更有效:rm bootstrap/cache/packages.php rm bootstrap/cache/services.php删除后可执行
php artisan optimize重新生成编译文件(可选)。检查环境变量配置
查看.env文件,确认是否存在关联Berita模块的变量(比如MODULES_ENABLED),确保当前分支的环境变量中未包含该模块。重启开发服务器
如果使用php artisan serve运行本地服务,重启服务器进程,避免旧文件内容被缓存。
内容的提问来源于stack exchange,提问作者Bachtiar Dwi Julianto

