只能通过config.vendor-dir在项目级composer.json中配置,且仅在vendor目录不存在时生效;-d参数仅改变工作目录,composer_vendor_dir需配合该配置才有效,改后须同步更新autoload路径、bin-dir、ide索引及ci脚本。

只能通过 config.vendor-dir 在项目级 composer.json 中配置,且仅在 vendor 目录不存在时生效;其他方式(如 -d 参数、环境变量 COMPOSER_VENDOR_DIR)要么无效,要么埋雷。
为什么 composer install -d /path 不能改安装路径
这个参数只改变 Composer 查找 composer.json 和 composer.lock 的工作目录,完全不控制依赖写入位置。它等价于先 cd /path 再执行 composer install,vendor 仍会落在原项目的 vendor/ 下(或已配好的 config.vendor-dir 路径中)。
- CI 脚本里滥用
-d是高频翻车点:本地跑通,流水线却报Class not found,根本原因是没同步配config.vendor-dir -
COMPOSER_VENDOR_DIR环境变量仅对当前项目有效,但必须配合config.vendor-dir才起作用——它本身不会覆盖 vendor 写入逻辑 - 一旦
vendor目录已存在,再改任何配置都不会移动它,也不会让下次update写到新路径
正确配置 config.vendor-dir 的前提和操作
该字段必须写在项目根目录的 composer.json 的 config 段里,且只有在首次安装或重装时才生效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 删掉现有
vendor目录和composer.lock - 在
composer.json中加入:{"config": {"vendor-dir": "third-party"}} - 运行
composer install—— 此时依赖才会真正装进third-party/ - 所有
require 'vendor/autoload.php'必须同步改成require 'third-party/autoload.php'
改了 vendor-dir 后 bin 文件调不了?还得配 bin-dir
Composer 会把包声明的 "bin" 字段对应文件软链到 vendor/bin/。你只改了 vendor-dir,没动 bin-dir,链接就断了。
- 必须在
config中同时指定:"config": { "vendor-dir": "third-party", "bin-dir": "third-party/bin" } -
third-party/bin/下的可执行文件(如phpunit)需手动检查是否存在 - CI 脚本、IDE 运行配置、甚至 PHPStorm 的 “External Tools” 都得更新为新路径,比如把
vendor/bin/phpunit改成third-party/bin/phpunit - IDE(如 PHPStorm)默认只索引
vendor,需手动在Settings → PHP → Include Paths中添加新路径
想按包类型分路径?用 installer-paths 插件
这不是改 vendor 总目录,而是把特定类型包(如 WordPress 插件、Drupal 核心)装到自定义子路径下,需要额外插件支持。
- 先执行
composer require composer/installers(v2.x 起才支持) - 目标包自身
composer.json中必须声明匹配的type(如"type": "wordpress-plugin"),普通library类型不触发 - 配置写在项目根
composer.json的extra.installer-paths下,格式严格:"extra": { "installer-paths": { "wp-content/plugins/{$name}/": ["type:wordpress-plugin"], "web/core/": ["drupal/core"] } } - 改完必须删掉整个
vendor和composer.lock,再跑composer install—— 已有包不会被重排
最容易被忽略的是:改 vendor-dir 后,autoload.php 入口路径、bin 调用、IDE 索引、CI 脚本这四类地方几乎必然要同步改,漏一个就卡住。没有“改一处就全局生效”的捷径。










