config.vendor-dir是唯一真正生效的项目级vendor路径配置,必须写在根目录composer.json的config字段下、用相对路径、且重装前需删除旧vendor和composer.lock;-d参数仅改变工作目录,不影响安装路径。

只能通过 config.vendor-dir 在项目级 composer.json 中配置,且必须删掉旧 vendor 目录后重装才生效;其他方式要么无效,要么埋坑。
为什么 composer install -d /path 不能改安装路径
这个参数只改变 Composer 查找 composer.json 和 composer.lock 的工作目录,完全不影响依赖写入位置。它等价于先 cd /path 再执行 composer install,vendor 还是落在原项目的 vendor/(或已配的 config.vendor-dir)下。
- CI 脚本里滥用
-d是常见翻车点:本地跑通,流水线却报Class not found,因为没同步改config.vendor-dir - 想让包装到
/tmp/myapp/third-party,必须提前在/tmp/myapp/composer.json里写好"config": {"vendor-dir": "third-party"} -
-d不影响 autoload、bin 或 IDE 索引,这些全按实际 vendor 路径生成
怎么正确配置 config.vendor-dir
这是唯一稳定、官方支持的项目级路径控制方式,但有硬性前提:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须写在项目根目录
composer.json的顶层config字段下,不能缩进错位或塞进extra - 值必须是相对路径(如
"libs"),不能以/开头,也不支持$HOME或通配符 - 改完后必须手动删除整个
vendor目录和composer.lock,再运行composer install——update不会迁移已有包 -
vendor/autoload.php入口文件、bin/下的可执行文件、PSR-4 映射全部按新路径生成,代码里所有require 'vendor/autoload.php'都得同步改成新路径
installer-paths 不是通用路径重定向
它只对声明了特定 type(如 wordpress-plugin)且已安装对应 installer(如 wpackagist/installer)的包生效,普通 library 类型完全不触发。
- 三个条件缺一不可:项目已
composer require composer/installers(≥2.0)、目标包composer.json有匹配type、执行前删掉整个vendor和composer.lock -
"wp-content/plugins/{$name}/": ["type:wordpress-plugin"]中的{$name}是占位符,会被替换成包名最后一段(如acme/my-plugin→my-plugin) - 路径必须相对于项目根目录,不能以
/开头;写成"/wp-content/plugins/"在 Windows 下可能解析失败 - 如果加了规则但包仍进
vendor/,优先检查是否漏装composer/installers或包的type根本没被任何 installer 支持
全局路径和 COMPOSER_HOME 的真实作用
COMPOSER_HOME 只控制 Composer 自身的配置、缓存、全局插件和 vendor/bin 全局命令存放位置,它本身不改变项目依赖安装路径 —— 除非你配合该目录下的 config.json 设置 "vendor-dir",让所有项目共用一个集中 vendor。
- 单独设
COMPOSER_HOME不会让composer global require laravel/installer装到别处;全局包固定在$COMPOSER_HOME/vendor/下 - 设了
COMPOSER_HOME后必须手动迁移auth.json、config.json和插件,否则静默失败 -
$COMPOSER_HOME/vendor/bin必须加入PATH,否则全局命令(如laravel)调不到 -
COMPOSER_VENDOR_DIR在 Composer 2.x 中已失效,不要用
真正要改 vendor 路径,就老老实实删 vendor、改 composer.json、重装;想绕过 per-project 限制搞共享 vendor,得靠 COMPOSER_HOME + 全局 config.json 配合,而不是幻想某个环境变量能一键生效。










