config.vendor-dir是唯一可靠方式,必须在项目根目录composer.json的config字段下用相对路径配置,且需删除旧vendor后运行install;COMPOSER_VENDOR_DIR在2.x中已失效,installer-paths仅对特定type包生效。

composer.json 里配 config.vendor-dir 是唯一可靠方式
每个项目想用不同 vendor 路径,只能在各自根目录的 composer.json 里写死 "vendor-dir": "xxx"。这不是“推荐做法”,是 Composer 唯一认的路径控制逻辑——其他所有尝试(比如命令行加参数、改全局配置、环境变量)在 Composer 2.x 中要么被移除,要么优先级极低或完全不生效。
常见错误包括:
- 在
composer.json里把vendor-dir写进extra或缩进错层,结果被忽略 - 值用了绝对路径(如
/var/www/myapp/vendor),但 Composer 要求必须是相对路径(如lib/vendor) - 改完配置后没删旧
vendor目录就直接composer install,导致 autoload 和 bin 文件残留旧结构,类加载失败
COMPOSER_VENDOR_DIR 环境变量在 2.x 已失效
很多老教程说设 COMPOSER_VENDOR_DIR 就能动态切路径,这在 Composer 2.x 中是错的。该环境变量早在 2.0 版本发布时就被标记为废弃,2.2+ 后彻底不读取。你 export 它,composer install 仍然照常往默认 vendor 或 composer.json 里写的 vendor-dir 走。
如果你真需要跨环境动态路径(比如 CI/CD 多项目共用一个构建目录),正确做法是:
- 在 CI 脚本中先生成带目标
vendor-dir的composer.json(比如用jq或模板工具注入) - 再执行
composer install - 避免依赖任何环境变量“覆盖”路径逻辑
改了 vendor-dir 后,autoload.php 和 bin 必须手动适配
Composer 不会自动帮你改代码里的 require 'vendor/autoload.php',也不会更新部署脚本中硬编码的 vendor/bin/phpunit。这是最容易漏掉、上线即报错的一环。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
你需要同步处理:
- 所有入口文件(
index.php、bin/console、tests/bootstrap.php)中的require路径 - CI 脚本、Dockerfile、Makefile 里调用的二进制命令路径(如把
vendor/bin/phpcs改成lib/vendor/bin/phpcs) - IDE(如 PHPStorm)的 Include Paths 需手动添加新
autoload.php所在目录,否则跳转和补全失效 -
.gitignore要确认新路径(如lib/vendor/)已加入,避免误提交
别指望 installer-paths 替代 vendor-dir
extra.installer-paths 看起来像能按包分目录,但它只对声明了特定 type(如 wordpress-plugin)且你已装了对应 installer 插件(如 composer/installers)的包生效。普通 library 类型的包,哪怕写进 installer-paths 规则,也照样进 vendor 或你配的 vendor-dir。
换句话说:它不是“路径路由表”,而是“类型分发器”。想让所有依赖都走自定义路径,这条路走不通。
真正要隔离不同项目的依赖路径,就老老实实每个项目配自己的 composer.json + config.vendor-dir,删干净旧 vendor,再重装。没有捷径,漏一步就断 autoload。

















