config.vendor-dir在Composer 2.0+已彻底废弃,不生效且触发弃用警告;唯一可靠方式是设置环境变量COMPOSER_VENDOR_DIR,它优先级最高,对install、update、require等所有命令均生效。

config.vendor-dir 在 Composer 2.0+ 还管用吗?
不管用,而且会报错。Composer 2.0+ 已彻底移除 config.vendor-dir,你写在 composer.json 里的 {"config": {"vendor-dir": "lib"}} 不仅无效,还会触发弃用警告:The "config.vendor-dir" option is deprecated, use the "COMPOSER_VENDOR_DIR" environment variable instead.
这不是“没生效”,而是被主动跳过——composer install 依然执行,但所有包照旧装进 vendor/。
- 运行
composer diagnose会明确提示该配置已废弃 - 旧教程里复制的 JSON 片段,在当前版本属于无效代码
- 想全局改路径,唯一官方支持的方式是环境变量
COMPOSER_VENDOR_DIR
怎么用 COMPOSER_VENDOR_DIR 正确指定路径?
它优先级高、全命令生效(install、update、require 都认),且不依赖项目配置是否存在。
Linux/macOS:
COMPOSER_VENDOR_DIR=third-party composer install
Windows CMD:
set COMPOSER_VENDOR_DIR=third-party && composer install
PowerShell:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
$env:COMPOSER_VENDOR_DIR="third-party"; composer install
- 路径可以是相对路径(如
third-party)或绝对路径(如/var/www/myapp/libs) - 不要用以
/开头的“伪绝对路径”(如/third-party),Windows 下可能解析失败 - 永久生效:加到
~/.zshrc或系统环境变量,注意重启终端/IDE 才加载
extra.installer-paths 为什么写了没反应?
不是语法错,而是三个条件缺一不可:
- 项目必须已执行
composer require composer/installers(且版本 ≥ 2.0) - 目标包自身
composer.json中声明了匹配的type(如"type": "wordpress-plugin"),普通library类型完全不触发 - 必须删掉整个
vendor目录和composer.lock,再跑composer install—— 它不会重排已有包
配置示例(写在根项目 composer.json 的 extra 字段下):
"extra": {
"installer-paths": {
"wp-content/plugins/{$name}/": ["type:wordpress-plugin"],
"web/core/": ["drupal/core"]
}
}
注意:{$name} 是占位符,会被替换成包名最后一段(如 acme/my-plugin → my-plugin);路径必须相对于项目根目录,不能以 / 开头。
改完路径后 autoload 和 bin 为啥还报错?
COMPOSER_VENDOR_DIR 只控制安装位置,不自动修复任何硬编码引用。
-
require 'vendor/autoload.php'必须手动改成require 'third-party/autoload.php',或改用动态路径:require __DIR__ . '/third-party/autoload.php'; -
vendor/bin/phpunit要同步改为third-party/bin/phpunit,CI 脚本、$PATH、Makefile 里所有调用都得扫一遍 - PHPStorm 默认只索引
vendor/,需手动在 Settings → PHP → Include Paths 中添加新路径 - 某些框架脚本(如 Laravel 的
artisan初始化逻辑)可能内部拼了vendor字符串,这类要查源码或 patch
最容易被忽略的是:composer dump-autoload 本身没问题,但它生成的 autoload.php 是基于当前 COMPOSER_VENDOR_DIR 值写的——所以必须确保该变量在运行时已正确设置,否则类加载路径还是错的。

















