类找不到是因为 Composer 安装后未自动重生成 autoloader,需手动执行 composer dump-autoload(加 -o 优化 classmap、--no-dev 生产环境适配),并检查 autoload 配置是否正确、路径是否存在、命名空间是否匹配。

为什么 composer require 后类找不到?
因为包的 composer.json 里用了非标准 autoload 规则(比如 classmap 指向未生成的目录、psr-4 前缀映射到错误命名空间、或混用 files + autoload-dev),Composer 安装后不会自动触发重生成 autoloader,导致 vendor/autoload.php 无法解析该包里的类。
- 运行
composer require vendor/package只下载代码并更新composer.lock,不强制 dump-autoload - 若该包依赖手动注册的
files或特殊classmap,必须显式重建自动加载映射 - CI 环境或部署脚本中漏掉这步,就会报
Class not found
如何让自定义 autoload 生效?
安装后立刻执行 composer dump-autoload —— 但要注意参数组合:
- 加
-o(即--optimize):强制生成 classmap(对classmap类型 autoload 必须) - 加
--no-dev:生产环境避免加载 dev-only 的autoload-dev.files - 若包使用
files类型(如全局函数文件),必须确保路径存在且可读,否则 dump 会静默跳过 - 检查该包的
composer.json中autoload字段,确认是否含exclude-from-classmap,它可能屏蔽了你期望扫描的目录
遇到 “Class not found” 时怎么快速定位?
别急着改代码,先验证 autoload 是否真包含该类:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 运行
composer show vendor/package,看输出里Autoload行是否列出你调用的类路径 - 用
composer dump-autoload -v查看详细扫描过程,留意是否有Skipping或Warning: Class ... is not in the expected namespace - 临时加一行
var_dump(require 'vendor/composer/autoload_classmap.php');,搜索你的类名是否存在键值对 - 如果类在
src/但psr-4映射写成"Vendor\Package\": "lib/",就注定找不到
某些包 require 后仍需手动处理?
是的。比如 Laravel 的 service provider 包、WordPress 插件封装包、或带 post-install-cmd 脚本的私有包,它们往往依赖额外步骤:
-
composer require laravel/ui后要跑php artisan ui vue才生成前端 scaffold - 私有包若在
composer.json中定义了scripts.post-install-cmd,但 Composer 默认不执行(尤其--no-scripts场景),就得手动补上 - 有些包把核心类放在
dist/下且只在files中声明,但dist/是构建产物 —— 若你拉的是源码分支而非 dist 分支,files列表就失效了
真正麻烦的不是 require 本身,而是你默认相信“装完就能用”,而没去看包文档里那行小字:“Run composer dump-autoload -o after install”。

















