config.vendor-dir 在 composer 2.0+ 中已弃用但仍有效,需置于 composer.json 顶层 config、用合法相对路径、手动创建父目录并重装 vendor;composer_vendor_dir 环境变量覆盖有限且不改 autoload.php 路径。

config.vendor-dir 还能用吗?看 Composer 版本再决定
不能一概而论。Composer 2.0+ 官方明确标记 config.vendor-dir 为 deprecated,但**它并未被移除,仍在绝大多数项目中实际生效**——前提是你的 Composer 版本不是严格启用“废弃警告即错误”策略的定制构建。你运行 composer diagnose 如果看到 The "config.vendor-dir" option is deprecated,说明它被读到了,只是打了警告;如果完全没提示、vendor 也没挪动,那大概率是配置写错位置或路径不合法。
怎么写才真正生效:路径、位置、时机三要素
必须同时满足以下条件,config.vendor-dir 才会起作用:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
vendor-dir字段必须放在项目根目录composer.json的顶层config对象里,不能嵌套在extra或scripts中 - 值必须是**相对路径**,如
"lib/vendor"或"third-party",不能以/开头,也不能含.. - 父级目录(如
lib/)需提前手动创建,Composer 不会自动建多层目录 - 改完后必须**彻底删除现有
vendor目录**,再执行composer install(update不会迁移已有包)
COMPOSER_VENDOR_DIR 环境变量到底靠不靠谱
它比 config.vendor-dir 更“硬”,但覆盖范围有限:
- 在 Composer 2.2+ 中,
COMPOSER_VENDOR_DIR对install、update、require生效,但dump-autoload、run-script、diagnose等命令**完全忽略它** - 它不会修改
vendor/autoload.php里的路径硬编码,所以类加载器仍可能按旧路径找文件 - CI/CD 脚本若依赖
composer dump-autoload生成正确映射,单设环境变量会导致 autoload 失败 - 它不能替代
config.vendor-dir做项目级可复现配置,只适合临时调试或容器化部署中的路径注入
改完 vendor 路径后最容易崩的三个地方
很多人以为改完路径、重装就完事了,结果第二天 CI 报错或 IDE 找不到类。真正要检查的是:
-
autoload.files和autoload.psr-4里是否硬编码了vendor/——比如"files": ["vendor/autoload.php"]得同步改成新路径 - 项目根目录下
autoload.php引用是否还写死vendor/autoload.php,尤其 Laravel 的bootstrap/autoload.php或自定义入口脚本 - IDE(如 PHPStorm)的 Include Path 和 Composer Autoloading 设置是否还指向旧
vendor,否则补全和跳转会失效
composer.json 写好 config.vendor-dir,删 vendor,跑 install,再立刻验证 dump-autoload 输出和 composer show 列出的路径是否一致。










