类找不到应先运行composer dump-autoload强制重生成自动加载映射,并检查包的composer.json是否含有效autoload配置(如psr-4或classmap),若使用classmap需在项目composer.json中显式声明路径后再次执行dump-autoload。

composer require 之后类找不到怎么办
不是包没装上,是 Laravel 没“看见”它——composer require 只写入 composer.json 并解压到 vendor/,但不会自动刷新类加载映射。
- 立刻运行
composer dump-autoload,强制重生成vendor/autoload.php中的类路径表 - 检查该包的
composer.json是否含有效autoload配置,比如"psr-4": {"Spatie\Permission\": "src/"} - 若包用的是
classmap(如把类放app/Libs/),必须在项目根目录的composer.json的autoload.classmap里显式加路径,再dump-autoload
为什么 php artisan vendor:publish 没反应
这个命令只对声明了可发布资源的包生效,不是所有包都带配置文件或迁移。
- 先运行
php artisan vendor:publish --list,看输出里有没有你的包名;空列表 = 包没声明任何 publishable assets - 查包的
composer.json里是否有extra.laravel.publishes或extra: { "laravel": { "dont-discover": false } } - 有些包(如
laravel/scout)要先执行初始化命令(php artisan scout:install)才生成配置,不能硬凑vendor:publish
Laravel 5.5 自动发现失效时怎么手动注册
自动发现(Package Discovery)默认开启,但会被 extra.laravel.dont-discover 关闭,或包本身未适配。
- 运行
php artisan package:discover,观察终端是否输出你的包的服务提供者类名(如SpatiePermissionPermissionServiceProvider) - 没出现?打开
vendor/包名/composer.json,确认没有"dont-discover": ["*"],且extra.laravel段存在或为空 - 需手动注册时,在
config/app.php的providers数组末尾加一行:SpatiePermissionPermissionServiceProvider::class - 如果包提供 Facade(如
Permission),还要在aliases里加:'Permission' => SpatiePermissionFacadesPermission::class
升级包时别直接 composer update
composer update 会重新解析整个依赖树,可能意外升到不兼容版本,尤其涉及 illuminate/* 组件的包。
- 只升级单个包:用
composer update vendor/package --with-dependencies - 生产环境部署必须用
composer install --no-dev,靠composer.lock锁死版本,严禁用update - 升级前先查包文档的 Laravel 版本兼容性(比如
spatie/laravel-permissionv5 要求 Laravel 9+,5.5 只能用 v2 或 v3)
guzzlehttp/guzzle:^7.0,而你项目里锁死的是 ^6.5,Composer 2.9.6 会静默降级或拒绝安装,但不会明确告诉你哪一行约束被违反。


















