唯一可靠方式是通过 composer.json 的 config.vendor-dir 配置指定 vendor 路径,-d 参数仅切换工作目录,composer_vendor_dir 环境变量在 composer 2.x 已失效。

composer install -d 不能改 vendor 路径
很多人试过 composer install -d /tmp/myapp,以为能指定安装目录,结果包还是装进原项目的 vendor/。这是因为 -d 参数只告诉 Composer 去哪找 composer.json 和 composer.lock,它完全不控制写入位置——等价于先 cd /tmp/myapp 再运行 composer install,路径逻辑没变。
常见错误现象:CI 脚本里用 -d 切工作目录,但没配 config.vendor-dir,导致部署后 Class not found,因为 PHP 还在加载旧路径下的 vendor/autoload.php。
config.vendor-dir 是唯一可靠方式
要真正改 vendor 目录,必须在项目根目录的 composer.json 里提前写死:"config": {"vendor-dir": "third-party"}。这个配置只在 vendor 不存在时生效,所以实操步骤是:
- 删掉现有
vendor/目录和composer.lock - 确保
composer.json的config.vendor-dir已设为相对路径(如"libs",不能以/开头) - 运行
composer install(不是update)
改完后,third-party/autoload.php 才是有效入口,所有代码里的 require 'vendor/autoload.php' 都得手动改成新路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
installer-paths 只对特定 type 的包生效
如果你只想让 WordPress 插件装到 wp-content/plugins/,而不是全部依赖都挪走,那就用 extra.installer-paths。但它不是通用路径重定向,必须满足三个条件:
- 目标包自身
composer.json中声明了"type": "wordpress-plugin"这类可识别类型 - 你的项目已运行
composer require composer/installers(或专用 installer 如wpackagist/installer) -
installer-paths规则必须写在根项目composer.json的extra字段下,且路径是相对于项目根的(如"wp-content/plugins/{$name}/")
普通库(type: library)哪怕写进 installer-paths 规则里,也照旧进 vendor/ —— 这是设计使然,不是 bug。
COMPOSER_VENDOR_DIR 在 Composer 2.x 已失效
别再查旧教程里写的 COMPOSER_VENDOR_DIR=third-party composer install,这个环境变量在 Composer 2.x 中已被移除,运行时会静默忽略。官方只认 config.vendor-dir 这一条路。如果看到文档还提这个变量,基本可以判定是 2021 年前的老资料。
容易被忽略的一点:改了 vendor-dir 后,bin-dir 也得同步配,否则 phpunit、laravel-zero 这类命令行工具的软链接会断。正确写法是:
"config": {
"vendor-dir": "third-party",
"bin-dir": "third-party/bin"
}










