错误。config.vendor-dir在composer 2.0+已彻底废弃,唯一有效方式是环境变量composer_vendor_dir;它优先级最高,对install、update、require等所有命令均生效,且支持项目级动态覆盖。

只能通过 config.vendor-dir 在项目级 composer.json 中配置,且仅在 vendor 目录不存在时生效;其他方式(如命令行参数、环境变量 COMPOSER_VENDOR_DIR)对项目依赖安装路径无效。
为什么 composer install -d 不能改 vendor 路径
-d 参数只改变 Composer 查找 composer.json 和 composer.lock 的工作目录,完全不控制依赖写入位置。它等价于先 cd 再执行命令,vendor/ 依然生成在原项目根下。
- 常见误用:CI 脚本里加
-d /tmp/build,结果 PHP 还是报Class not found——因为autoload.php还在默认vendor/下,而你没配对vendor-dir - 真正要换路径,必须提前在目标项目的
composer.json里写好"config": {"vendor-dir": "lib/vendor"} - 改完后必须删掉整个
vendor目录和composer.lock,再跑composer install,否则旧结构残留,autoload 和 bin 都会错乱
config.vendor-dir 的写法和限制
路径可以是相对路径(推荐)或绝对路径,但不能是以 / 开头的“伪绝对路径”(如 /lib/vendor 在 Windows 下可能解析失败)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确示例:
"vendor-dir": "lib/vendor"或"vendor-dir": "/var/www/myapp/libs" - 错误示例:
"vendor-dir": "/lib/vendor"(开头斜杠易跨平台失效)、"vendor-dir": "vendor"(等于没改) - 注意:
vendor-dir是运行时配置项,只在全局配置(COMPOSER_HOME/config.json)中被读取;写在项目composer.json里会被忽略——这是 Composer 的硬性限制,不是配置错误
改了路径后哪些地方必须同步更新
路径一动,Composer 生成的所有入口都跟着变,但不会自动通知你的代码或工具链。
-
require 'vendor/autoload.php'必须改成require 'lib/vendor/autoload.php',否则直接Fatal error -
vendor/bin/phpunit变成lib/vendor/bin/phpunit,CI 脚本、IDE 运行配置、PATH环境变量都要手动改 - PHPStorm 默认只索引
vendor,需进Settings → PHP → Include Paths手动添加新路径 - 如果用了
extra.installer-paths,它的路径也必须相对于项目根目录,不能以/开头,且不兼容vendor-dir改动——它仍把包装进vendor/子目录,除非你同时删vendor并重装
最常被忽略的是:改完 vendor-dir 后没删 composer.lock 就直接 install,结果 autoload 映射还是旧路径,类加载器根本找不到文件——这不是缓存问题,是 autoload.php 生成逻辑本身锁死了路径。










