config.vendor-dir是唯一真正生效的全局路径配置,必须写在项目根目录composer.json的config字段下、用相对路径、且运行install前需删除旧vendor目录。

config.vendor-dir 是唯一真正生效的路径配置方式
想让所有包装进 third-party 或 libs 而不是默认 vendor,只有改项目根目录 composer.json 里的 config.vendor-dir 这一条路。其他方式——比如 COMPOSER_VENDOR_DIR 环境变量、composer install -d、命令行 --vendor-dir 参数——在 Composer 2.x 中要么被移除,要么被静默忽略。
必须同时满足三个条件才生效:
- 配置写在
composer.json最外层的config字段下,不能错放到extra或缩进错误 - 值必须是相对路径(如
"libs"),不能以/开头,也不支持$HOME或通配符 - 运行
composer install前,旧vendor目录必须已删除;composer update不会迁移已有包
installer-paths 只对特定 type 的包起作用
extra.installer-paths 不是“按包名重定向路径”的通用机制,它只在目标包自身声明了匹配 type(如 "wordpress-plugin")、且你项目已安装对应 installer(如 composer/installers ≥ 2.0)时才触发。
常见误解和操作要点:
- 普通库(
"type": "library")哪怕写进installer-paths规则里,也照旧进vendor - 必须删掉整个
vendor目录和composer.lock,再跑composer install——它不会重排已有包 - 路径必须相对于项目根目录,不能以
/开头;{$name}是占位符,会被替换成包名最后一段(如acme/my-plugin→my-plugin)
改完 vendor-dir 后 autoload 和 bin 都要手动同步
vendor/autoload.php 是生成时写死路径的入口文件。你改了 vendor-dir,但没重建结构或更新引用,PHP 就还在找原来的路径,报 Class not found 是必然结果。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
必须做这几件事:
- 代码里所有
require 'vendor/autoload.php'都得改成新路径,例如require 'third-party/autoload.php' - 在
config中同时指定bin-dir,且值要匹配新vendor下的子目录,例如:"config": { "vendor-dir": "third-party", "bin-dir": "third-party/bin" } - IDE(如 PHPStorm)默认只索引
vendor,需手动在 Settings → PHP → Include Paths 中添加新路径 - CI 脚本或部署命令中硬编码的
vendor/bin/phpunit必须同步更新为third-party/bin/phpunit
环境变量 COMPOSER_VENDOR_DIR 仅适用于动态场景
当需要在 CI/CD、Docker 或多租户部署中动态切换路径时,硬编码进 composer.json 就不灵活了。这时可以用 COMPOSER_VENDOR_DIR 环境变量覆盖,它的优先级高于 composer.json 中的配置。
但要注意实际限制:
- Linux/macOS:运行前执行
export COMPOSER_VENDOR_DIR="/tmp/myvendor" - Docker 中建议写进
Dockerfile的ENV或docker run -e参数里 - Web 服务器环境(如 PHP-FPM、Apache mod_php)中,该变量需在服务启动前注入,不能只在 shell 里
export - 环境变量生效的前提仍是:旧
vendor已删、autoload.php引用已更新、bin-dir已配对
最常被忽略的是路径变更后对团队协作的影响:虽然 composer.lock 不记录 vendor 路径,但 composer.json 中的 config.vendor-dir 必须提交,否则队友拉代码后仍会生成到默认 vendor,导致本地和 CI 行为不一致。










