唯一可靠方式是设环境变量 composer_vendor_dir;composer 2.0+ 已彻底废弃 composer.json 中的 config.vendor-dir,仅支持该环境变量全局指定 vendor 目录路径,且对所有命令(包括 create-project)生效。

直接改 vendor 目录位置,唯一可靠方式是设环境变量 COMPOSER_VENDOR_DIR;其他方法在 Composer 2.0+ 中已失效或仅部分生效。
为什么 config.vendor-dir 在 composer.json 里不生效
Composer 2.0+ 彻底移除了对项目级 composer.json 中 "config": {"vendor-dir": "..."} 的支持。写进去不仅没用,还会触发明确警告:The "config.vendor-dir" option is deprecated, use the "COMPOSER_VENDOR_DIR" environment variable instead. 这不是配置顺序问题,而是硬性废弃——Composer 解析时直接跳过该字段。
- 运行
composer diagnose会列出该弃用提示 -
composer install仍照常执行,但始终创建vendor/目录 - 即使你删掉
vendor并重跑命令,它还是回来
如何用 COMPOSER_VENDOR_DIR 全局指定路径
这是当前唯一被官方文档明确认可、全命令(install、update、require)都尊重的方案,优先级高于所有配置文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:在 shell 配置中添加
export COMPOSER_VENDOR_DIR="/opt/shared-vendor",然后source ~/.bashrc或重启终端 - Windows(CMD):运行
set COMPOSER_VENDOR_DIR=C:\php-packages(仅当前会话);如需永久,用系统属性 → 环境变量 → 新建系统变量 - Windows(PowerShell):运行
$env:COMPOSER_VENDOR_DIR="C:\php-packages",或写入$PROFILE - 验证是否生效:执行
composer config --global vendor-dir,输出应为空(因为全局 config 不再管这事),但composer install会真把包装进你指定的路径
部署时想保留 vendor 目录名?用软链绕过
某些工具(如 PHPStan、Xdebug 路径映射、CI 构建脚本)硬编码依赖 vendor 这个目录名,不能直接删。此时不改路径,而是改指向:
- 先创建共享目标目录:
mkdir -p /srv/php-shared-vendor - 在项目根目录执行:
rm -rf vendor && ln -s /srv/php-shared-vendor vendor - Windows 下用
mklink /D vendor C:\php-shared-vendor(需管理员权限) - 注意:软链必须在
composer install前建立,否则 Composer 会发现vendor不存在并自己新建一个空目录
真正容易被忽略的是:环境变量 COMPOSER_VENDOR_DIR 对 composer create-project 同样生效,但如果你在 CI/CD 流水线中用 Docker 多阶段构建,得确保该变量在 build 阶段也显式传入,否则 stage 之间不继承。










