本地扩展包 autoload 失效主因是 Composer 未合并 path 仓库配置,须用 composer update my-sdk/my-package 刷新,而非 dump-autoload;需确保 repositories 正确定义、路径有效、PSR-4 命名空间与目录结构严丝合缝、避免 classmap 冲突、禁用 COMPOSER_VENDOR_DIR 环境变量,并提交修改后的 composer.json。

本地扩展包的 autoload 冲突,90% 是因为 Composer 没把它的配置合并进主项目映射——不是你写错了,而是你没触发正确的刷新机制。
path 仓库改了 autoload 却不生效?别 dump-autoload,要 update
Composer 对 path 类型仓库的 autoload 配置,只在 composer install 或 composer update vendor/name 时读取并写死到 vendor/composer/autoload_*.php 中。composer dump-autoload 完全无效,它只重写主项目的映射,不碰 path 包的配置。
- 确认你的
repositories块已正确定义,且path指向的是**绝对路径或相对于项目根目录的有效相对路径**(如"./packages/my-sdk") - 确保该本地包的
composer.json里有合法autoload块,例如:"psr-4": {"MySdk\": "src/"}(注意末尾反斜杠和双反斜杠转义) - 运行
composer update my-sdk/my-package,而不是dump-autoload;若包未被require过,先composer require my-sdk/my-package --no-update,再update - 检查
vendor/composer/autoload_psr4.php,搜索"MySdk\",确认其路径值是绝对路径、且指向你本地的src/目录,而非 vendor 下的副本
PSR-4 映射崩在大小写和层级上
Composer 的 PSR-4 是纯字符串截取+拼接,不扫描文件系统。哪怕文件真实存在,只要命名空间与路径结构不严丝合缝,就直接跳过。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 类
MySdkHttpClient必须对应文件src/Http/Client.php,不能是src/http/client.php(Linux/macOS 下大小写敏感) - 命名空间不能多一层冗余:如果目录是
packages/my-sdk/src/MySdk/HttpClient.php,那命名空间必须是MySdk\HttpClient,而不是MySdk\MySdk\HttpClient - 路径值在
composer.json中必须以斜杠结尾("src/"),否则某些系统下会拼错路径 - 用
ls -l packages/my-sdk/src/确认目录名、文件名大小写完全一致,别依赖开发机“宽容”
同一类名被 PSR-4 和 classmap 同时命中?行为未定义
如果你在主项目 composer.json 里既配了 psr-4 又配了 classmap,而本地包里某个类恰好同时满足两条规则,Composer 通常以 PSR-4 为准,但 classmap 映射可能残留,导致加载结果不可预测。
- 检查主项目
composer.json是否在autoload下混用了psr-4和classmap,尤其当本地包也声明了classmap时 - 打开
vendor/composer/autoload_classmap.php,搜索该类名,看是否重复出现;若有,删掉vendor/composer/autoload_*.php全部文件,再composer update my-sdk/my-package - 优先用 PSR-4;若本地包含无命名空间的老代码,才考虑
classmap,且确保类名不与 PSR-4 规则下的任何类重名
vendor 共用或环境变量污染导致映射错乱
多个项目共用 vendor 目录,或设置了 COMPOSER_VENDOR_DIR 环境变量,会导致 autoload.php 里的 __DIR__ 硬编码路径错位,PSR-4 映射指向空目录。
- 执行
echo $COMPOSER_VENDOR_DIR(Linux/macOS)或echo %COMPOSER_VENDOR_DIR%(Windows),若输出非空,**立即删除该环境变量** - 每个项目必须独立执行
composer install或update,绝不能在父级目录操作 - 验证方式:在项目根目录运行
php -r "echo __DIR__;",对比vendor/autoload.php第一行中的__DIR__输出,必须完全一致 - 若已污染,删除当前项目的
vendor/和composer.lock,重新install并update本地包
最易被忽略的一点:path 仓库的 composer.json 修改后,必须 git add 并提交(如果用了 git),否则 composer update 读的是旧版本配置——你改了,但 Composer 不知道。

















