唯一可靠方式是在项目根目录composer.json的config字段下配置相对路径的config.vendor-dir,且必须删除旧vendor后执行install;composer_vendor_dir已失效,autoload和bin路径需同步更新。

composer.json 里配 config.vendor-dir 是唯一可靠方式
想让所有依赖装进 libs 或 third-party 而不是默认 vendor,只能改项目根目录下的 composer.json。其他方法——比如命令行加参数、全局配置、环境变量——在 Composer 2.x 中要么被移除,要么静默失效。
必须满足三个条件才真正生效:
-
config.vendor-dir必须写在composer.json最外层的config字段下,不能错放到extra或缩进错误 - 值必须是相对路径(如
"libs"),不能以/开头,也不支持$HOME或通配符 - 运行
composer install前,旧vendor目录必须已删除;composer update不会迁移已有包
COMPOSER_VENDOR_DIR 环境变量在 Composer 2.x 已失效
网上很多教程说设 COMPOSER_VENDOR_DIR=libs 就能改路径,这是过时信息。Composer 2.0+ 已彻底移除对该变量的支持,设了也完全不生效,且不会报错——它只是被忽略。
验证很简单:设完变量后运行 composer diagnose,如果看到 The "config.vendor-dir" option is deprecated 提示,说明你正用着已被废弃的旧配置逻辑;而 COMPOSER_VENDOR_DIR 根本不会出现在任何诊断输出里。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
真正起效的只有 config.vendor-dir,且只对当前项目有效。
改完路径后 autoload 和 bin 都要手动同步
路径一变,vendor/autoload.php 就变成 libs/autoload.php,但 PHP 代码里所有 require 'vendor/autoload.php' 还是原样——结果就是 Class not found。
- 所有
require语句必须手动改成新路径,例如require 'libs/autoload.php' -
bin目录也会跟着挪到新位置,但如果你没同时配bin-dir,软链接就断了。需在config中补上:"config": { "vendor-dir": "libs", "bin-dir": "libs/bin" } - CI 脚本、部署命令、IDE(如 PHPStorm 的 Include Paths)、甚至 Laravel 的
artisan内部 require 都得同步更新
容易被忽略的关键点:它只在 vendor 不存在时生效
config.vendor-dir 不是“重定向开关”,而是“初始化模板”。一旦项目已经跑过 composer install,再改这个配置,下次 update 依然往老 vendor 写——它不会自动迁移,也不会报错提醒。
所以最稳的操作流程是:删掉整个 vendor 目录 → 改 composer.json → composer install。漏掉第一步,后面全白搭。










