Composer不支持运行时用--vendor-dir指定安装目录,唯一可靠方式是在composer.json顶层config字段中设置vendor-dir为相对路径,如"lib/vendor"。

Composer 不支持运行时用 --vendor-dir 或类似参数直接指定安装目录;composer install 和 composer require 均不接受该选项。唯一可靠方式是通过配置文件预设。
在 composer.json 中设置 vendor-dir
这是最常用、最稳定的方案。修改项目根目录下的 composer.json,在顶层添加 config 字段:
{
"name": "my/project",
"type": "project",
"config": {
"vendor-dir": "lib/vendor"
},
"require": {
"monolog/monolog": "^2.0"
}
}
之后执行 composer install 或 composer update,依赖会安装到 lib/vendor 而非默认的 vendor。注意:config 必须是顶层字段,不能嵌套在 extra 或其他位置。
使用 composer.json 的 config.platform 无法替代 vendor-dir
platform 仅用于声明当前环境“假装存在”的扩展或 PHP 版本,和路径无关。常见误解是把 vendor-dir 写进 platform,这会导致 Composer 忽略该配置,仍走默认路径。
-
config.platform.php→ 控制php版本兼容性检查 -
config.vendor-dir→ 控制依赖实际存放位置 - 二者语义完全不重叠,不可混用
全局配置 COMPOSER_HOME/config.json 会影响所有项目
若在 $COMPOSER_HOME/config.json(通常是 ~/.composer/config.json 或 %APPDATA%\Composer\config.json)中写入 vendor-dir,则所有未在项目级 composer.json 中覆盖该配置的项目都会遵循此路径。这容易引发意外行为:
- 多个项目共享同一
vendor目录 → 依赖冲突风险极高 - CI 环境中可能因全局配置导致构建失败
- 团队协作时难以追踪路径来源
除非有强管控需求(如企业内部标准化构建),否则不建议用全局配置改 vendor-dir。
真正生效的只有项目级 composer.json 中的 config.vendor-dir;临时命令行参数、环境变量、全局配置都不可靠或副作用明显。路径值必须为相对路径(相对于 composer.json 所在目录),且不能以 / 或 ../ 开头(Composer 会拒绝解析)。










