运行 composer dump-autoload 可强制刷新 autoload 映射,解决新增类、修改 PSR-4 路径等导致的 Class not found 问题;若依赖包自身 autoload 变更或 vendor 被清空,则需先 composer install/update 再执行该命令。

为什么 composer install 后类还是找不到?
因为 Composer 安装依赖时,autoload 映射只在必要时生成或更新——比如首次安装、composer.json 中的 autoload 配置有变动,或你手动删了 vendor/autoload.php。但如果你只是新增了一个本地类、改了命名空间路径、或合并了别人提交的 autoload 变更,Composer 不会自动重扫文件。这时候 vendor/autoload.php 里没注册新类,Class not found 就来了。
composer dump-autoload 是最直接的解决方式
这条命令强制重新解析 composer.json 里的 autoload 和 autoload-dev 配置,并重建 vendor/composer/autoload_*.php 文件。它不重装包,只刷新映射,快且安全。
常见使用场景和参数建议:
- 日常开发中加了新类、改了
psr-4映射路径 → 直接运行composer dump-autoload - 想让自动加载支持开发阶段的测试类(比如
tests/下的类)→ 加-o或--optimize参数,它会生成更紧凑的类映射表(但注意:该模式下新增类必须再跑一次dump-autoload才生效) - 项目启用了 classmap 自动发现(如
"classmap": ["src/", "lib/"]),但你新增了文件 → 必须加-a或--append,否则旧 classmap 不会被重新扫描
什么时候不能只靠 dump-autoload?
如果依赖包本身改了它们自己的 autoload 配置(比如某包升级后把 psr-4 路径从 "Foo": "src/" 改成 "Foo": "lib/"),仅运行 dump-autoload 不会拉取新版本的包,也就不会读到新版的 autoload 声明。这时得先 composer update vendor/package-name 或 composer update,再补一次 dump-autoload。
另外,如果你删过 vendor/ 目录或用 git clean -fdx vendor 清理过,别跳过 composer install 直接 dump-autoload——因为 vendor/composer/installed.json 不存在,Composer 根本不知道该为哪些包生成映射。
检查映射是否真生效了
别只信终端输出的 “Generating autoload files…”。打开 vendor/composer/autoload_psr4.php(或 autoload_classmap.php),搜你的命名空间前缀,确认路径对得上。也可以临时加一行:var_dump(class_exists('Your\Namespace\ClassName'));,看是 true 还是 false。
一个容易被忽略的点:Composer 的 autoload 映射是大小写敏感的,而 Windows/macOS 默认文件系统不敏感。你在 macOS 上跑通了,CI(Linux)可能报错——所以路径配置里别写 "App\": "src/app/",而要确保目录名真实是 app,不是 App 或 APP。











