Path仓库autoload不生效是因为Composer仅在install/update时解析其autoload配置,需运行composer update vendor/name而非dump-autoload,并确保该包已声明在主项目require中。

Path 仓库的 autoload 不生效,不是 Composer 没识别到包,而是它压根没把你的本地路径映射进自动加载规则里——composer.json 里写的 "psr-4" 再对,也不会自动同步到主项目的 autoload_psr4.php,必须手动触发刷新。
path 仓库注册了但类仍报 Class not found
Path 仓库让包“存在”,但不等于它的类能被自动加载。Composer 只在 composer install 或 composer update 时,把仓库中包的 autoload 配置合并进主项目映射;如果你只改了 path 包里的 composer.json,或新增了类文件,主项目完全无感。
- 确认 path 包的
composer.json中有合法"autoload"块,例如:"psr-4": {"Acme\": "src/"}(注意末尾反斜杠和双反斜杠转义) - 主项目运行
composer update acme/package-name(不是dump-autoload),强制重新拉取并解析 path 包的 autoload 配置 - 检查
vendor/composer/autoload_psr4.php,搜索"Acme\",确认其映射路径是绝对路径且指向你本地的src/目录,而非 vendor 下的副本 - 如果 path 包本身没提交
composer.json修改(比如 git 未 add),composer update会读旧配置,白忙一场
为什么 composer dump-autoload 对 path 仓库无效
composer dump-autoload 只重生成主项目的 autoload 映射,它不会重新读取 path 仓库里包的 composer.json —— 那些配置早在 install/update 阶段就被静态写死进 vendor/composer/autoload_*.php 了。
- path 仓库的 autoload 规则,只会在
composer install、composer update或显式composer require --dev时注入 - 修改 path 包的命名空间或目录结构后,必须
composer update vendor/name,不能只dump-autoload - 若用
repositories+path方式声明仓库,确保"options": {"symlink": true}已启用(尤其 Windows),否则某些文件变动可能被忽略
PSR-4 路径推导失败:大小写与层级错一位就全崩
Composer 的 PSR-4 是纯字符串截取+拼接,不扫描文件系统。哪怕 path 包里 src/Http/Client.php 实际存在,只要命名空间写成 AcmeHttpClient,它就会去找 src/HttpClient.php,直接跳过。
- 类
AcmeHttpClient必须对应文件src/Http/Client.php,中间不能多一层Acme目录(除非命名空间也含AcmeAcmeHttpClient) - Linux/macOS 下
src/http/client.php≠src/Http/Client.php,命名空间大小写必须和目录名、文件名完全一致 - 验证方式:在主项目跑
composer dump-autoload -v | grep "Acme\",看输出是否显示 “Psr4 mapping: Acme => /full/path/to/src” - 如果输出里没这行,说明 path 包的 autoload 根本没被载入——大概率是
composer.json语法错误,或该包未被require到主项目
最常被忽略的一点:path 仓库的包,必须出现在主项目的 require 或 require-dev 里,否则即使仓库注册了,Composer 也当它不存在——autoload 更无从谈起。


















