必须运行composer dump-autoload:修改类路径、新增类文件、调整composer.json中autoload配置(如psr-4映射、files列表);仅改类内部逻辑无需执行。

改了类文件位置、新增了类、或动了 composer.json 里的 autoload 配置,才需要手动运行 composer dump-autoload;只改类内部逻辑、修 bug、调参数,完全不用跑。
哪些代码变动必须触发 composer dump-autoload
Composer 不监听文件系统变化,它的自动加载映射是静态快照。以下情况不执行命令,新类或新路径就永远进不了 vendor/autoload.php 的查找逻辑:
- 在
src/Services/下新增了PaymentGateway.php,命名空间是AppServices,且composer.json已配"App\": "src/"→ 必须运行composer dump-autoload - 把
app/Models/User.php移到src/Domain/User.php,同时把命名空间从AppModels改成AppDomain,并在composer.json中新增"App\Domain\": "src/Domain/"→ 改完配置后不运行,new AppDomainUser()一定报Class not found - Git 切换分支后,发现队友加的
app/Console/Commands/DeployCommand.php找不到 → 说明本地autoload_psr4.php还是旧分支的映射,需手动刷新 - 在
composer.json的autoload.files里加了一行"helpers/functions.php",但vendor/autoload.php没加载它 → 因为files类型不会被 install/update 自动包含,必须显式 dump
composer dump-autoload -o 真正起作用的条件
-o(即 --optimize)不是“加速版 dump”,它只在特定条件下生成并启用 autoload_classmap.php。多数人误以为加了就快,其实常白跑:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 项目没定义
"classmap"字段,也没在autoload或autoload-dev里声明任何classmap路径 →-o只会重写已有 PSR 映射,不扫描磁盘,autoload_classmap.php不会被创建或更新 - 你加了
-o,但composer.json里只有psr-4配置 → 它只对psr-4声明的路径做全量扫描,且仅限autoload(不含autoload-dev) - 新增类后忘了再跑一次
composer dump-autoload -o→ classmap 是静态表,不会自动增量更新,新加的类查不到 - 类文件名和类名不一致(比如
Foo.php里定义class Bar)→-o仍会把它写进 classmap,运行时报错,但错误源头难定位
为什么有时跑了命令还是 Class not found
命令执行成功 ≠ 映射生效。真正卡点往往藏在配置层或环境细节里:
-
composer.json格式错误(比如多了一个逗号、引号不闭合)→dump-autoload会静默失败,建议加-v查看详细输出 - 路径大小写不一致:Linux/macOS 下
src/Models和src/models是两个目录,但 classmap 是精确匹配;Windows 开发者常在本地跑通,CI 上失败 - PHP 扩展缺失:某些包在 autoload 阶段就依赖
ext-intl或ext-mbstring,而 Composer 不校验这些,报错可能指向类找不到,实际是扩展没装 - 用了
--no-autoloader安装(如 CI 中),之后又忘了补dump-autoload→ vendor 目录存在,但所有 autoload_*.php 都是空的或缺失
最容易被忽略的是:你以为改了文件,其实没改对——比如只改了 PHP 文件的命名空间,却漏了 composer.json 里的 psr-4 映射路径;或者加了新目录,但没确认是否在 autoload 而非 autoload-dev 下。这种配置错位,跑十遍 dump-autoload 都没用。










