config.vendor-dir 是唯一真正生效的配置项,必须在 composer.json 中以相对路径配置,删 vendor 后重装才生效,且需同步更新 autoload.php 引用、bin-dir、CI 脚本及 IDE 索引路径。

config.vendor-dir 是唯一真正生效的配置项
Composer 没有命令行参数或环境变量能直接改 vendor 写入位置,COMPOSER_VENDOR_DIR 和 -d 都不生效——前者被 Composer 忽略,后者只影响配置文件查找路径。唯一受官方支持、全命令(install/update/require)一致识别的方式,是在项目根目录的 composer.json 中写死:
{ "config": { "vendor-dir": "third-party" } }路径必须是相对路径(如 "lib"、"deps"),不能以 / 开头,也不支持绝对路径。
改完必须删 vendor 再重装,否则完全无效
常见错误是:先运行过 composer install,再补加 vendor-dir 配置,结果包还是出现在 vendor/。因为 Composer 只在 vendor 目录不存在时才按新配置创建它;已有目录不会被移动,update 也不会迁移到新路径。
- 删掉整个
vendor目录(rm -rf vendor或手动删除) - 可保留
composer.lock,但若想彻底重置建议一并删掉 - 运行
composer install(不是update或dump-autoload)
改路径后 autoload.php 和 bin 文件全要手动适配
vendor/autoload.php 是生成时硬编码路径的入口文件。改了 vendor-dir 后,旧文件还在原处,PHP 还会去老地方找——所以你代码里所有 require 'vendor/autoload.php' 都得改成新路径,比如 require 'third-party/autoload.php'。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
bin-dir必须同步配,否则phpunit、laravel等命令失效:"config": { "vendor-dir": "third-party", "bin-dir": "third-party/bin" } - CI 脚本、部署命令中硬编码的
vendor/bin/phpunit得换成third-party/bin/phpunit - IDE(如 PHPStorm)默认只索引
vendor,需手动在 Settings → PHP → Include Paths 中添加新路径
单个包想单独放?得靠 composer/installers + type 规则
普通库(如 monolog/monolog)无法被单独指定安装路径,extra.installer-paths 对它们完全无效。只有声明了特定 type(如 wordpress-plugin、drupal-module)的包才可能触发路径重定向,且前提是:
- 已执行
composer require composer/installers - 目标包自己的
composer.json里写了匹配的type - 项目级
composer.json的extra.installer-paths中明确映射,例如:"installer-paths": { "wp-content/plugins/{$name}/": ["type:wordpress-plugin"] } - 路径值必须相对于项目根目录,且以
/结尾
真正难的不是改配置,而是让自动加载、脚本调用、IDE 支持、CI 流水线全部跟上新路径——漏掉任意一环,就会出现类找不到、命令失败或 IDE 报红。

















