vendor-dir 配错后需删旧 vendor 和 composer.lock 并运行 composer install(非 dump-autoload),因 autoload.php 路径硬编码且不自动更新;ide 或脚本中硬写路径也须同步修改。

vendor-dir 配错导致 autoload.php 找不到
改了 vendor-dir 却还报 Class not found 或 require(): failed to open stream: No such file,基本是没重建 vendor 结构。Composer 不会动态重写 autoload 入口,它只在 install 或 update 时生成新 vendor/autoload.php,且路径硬编码进文件里。
必须做三件事:
- 确认
composer.json的config.vendor-dir值合法(相对路径、不以/开头、不跨出项目根目录) - 删掉旧
vendor/和composer.lock - 运行
composer install,不是dump-autoload
IDE 或部署脚本里硬写的 vendor/autoload.php 路径也得同步改——Composer 不会自动修正这些外部引用。
installer-paths 配了但包仍进 vendor/
这不是语法错误,而是三个条件缺一不可:目标包的 type 必须匹配规则、项目已装 composer/installers、且该包是全新安装(已存在的包不会被重定位)。
典型误判场景:
-
monolog/monolog的"type": "library",而installer-paths写的是["type:wordpress-plugin"]→ 完全不触发 - 没运行过
composer require composer/installers→extra.installer-paths被彻底忽略 - 删了
vendor/但没删composer.lock→ Composer 认为包“已存在”,跳过重定位逻辑
验证方式:删干净后跑 composer install -vvv,看日志里是否出现 Installing monolog/monolog (... 后跟目标路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
全局镜像配置被项目 repositories 覆盖
运行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 看似成功,但 composer install 还是连 packagist.org?大概率是项目 composer.json 里有 "repositories" 字段。
只要存在这个字段(哪怕值是 {} 或 []),全局镜像就完全失效——不是优先级低,是直接跳过。
排查步骤:
- 进项目目录,执行
composer config repo.packagist,看输出是不是你设的 URL - 检查
composer.json是否含"repositories";有就删掉,或显式设为"packagist.org": false再加镜像 - 最准验证:
composer install -vvv 2>&1 | grep -i "host:",看实际请求的域名
Windows 中文路径导致 realpath() 失败
报错含 Invalid argument、realpath() returned false、failed to open stream,且路径含中文(如 C:\Users\张三\project),这和 Composer 配置无关,是 PHP 底层函数在 Windows 上对非 ASCII 路径解析失败。
根本无解于配置层面,只能绕开:
- 把项目移到纯英文路径下,比如
C:\work\myapp - 避免在用户名、目录名、文件名中使用中文、空格、特殊符号(如
@、&) - CI/CD 或 Docker 中更要注意:基础镜像默认用户家目录可能是
/root,但某些定制镜像会用中文用户名,同样触发
这个坑不会报明确的 “中文路径” 错误,只会让 install 卡在某个 scandir() 或 opendir() 调用上,日志里往往只有模糊的系统级失败提示。










