composer install 默认安装到项目根目录的 vendor 目录,路径硬编码不可临时更改;临时改路径需通过环境变量 COMPOSER_VENDOR_DIR(支持绝对路径)或提前在 composer.json 中配置 config.vendor-dir(仅限相对路径)。

composer install 默认装在哪?能不能临时改路径?
composer install 默认把所有依赖包安装到项目根目录下的 vendor 目录,这个路径是硬编码在 Composer 源码里的,不支持通过命令行参数(比如 -d 或 --path)临时更改。很多人试过 composer -d D:/myproject install,结果包还是下到原项目的 vendor 里——因为 -d 只是告诉 Composer 去哪找 composer.json,跟安装位置完全无关。
-
vendor是写死的,不能“绕过配置直接换地方” - 想换路径,必须提前配置,且只对当前项目生效
- 全局设置(如
COMPOSER_HOME)不影响vendor位置
改 vendor 目录位置最稳的方式:改 composer.json 的 config.vendor-dir
这是官方唯一完全支持、全命令兼容(install/update/require 都认)、优先级最高的方式。
-
在项目根目录的
composer.json里加这段:{ "config": { "vendor-dir": "D:/myproject/vendor" } }⚠️ 注意:vendor-dir值必须是**相对路径**(不能以/或D:开头),所以上面写法是错的;正确写法是:"vendor-dir": "vendor-disk-d"
然后你得自己把项目放在D:盘下,比如D:/myproject/,这样 Composer 才会把包装进D:/myproject/vendor-disk-d。 改完后必须手动删掉旧的
vendor目录,再运行composer installautoload.php路径会自动适配新位置,但代码里写死的require 'vendor/autoload.php'得同步改成require 'vendor-disk-d/autoload.php'IDE(如 PhpStorm)可能还缓存着旧
vendor路径,需要手动刷新索引或重新指定目录
想让所有项目都走 D 盘?用 COMPOSER_VENDOR_DIR 环境变量
适合 CI/CD、多项目统一管理,或开发机上强制隔离场景。它优先级高于 composer.json 里的配置,而且能用绝对路径:
-
Windows(PowerShell):
$env:COMPOSER_VENDOR_DIR="D:\projects\shared-vendor"
-
Linux/macOS:
export COMPOSER_VENDOR_DIR="/mnt/d/projects/vendor"
这个变量对
composer dump-autoload也生效如果同时设了环境变量和
composer.json,环境变量胜出某些共享主机或容器环境不支持自定义环境变量,这时只能退回
composer.json方式
容易被忽略的关键点:路径改了,但 autoload 和部署脚本没跟上
改 vendor-dir 最常出问题的地方不是 Composer 本身,而是人写的其他东西:
-
require或include语句里硬写了vendor/autoload.php,没跟着改 - Dockerfile 里的
COPY . /app后,又写了RUN composer install,但构建上下文没包含新vendor路径,或者.dockerignore误删了它 - 部署脚本用
rsync -av --exclude=vendor,结果现在要 exclude 的是vendor-disk-d - 全局命令(
composer global require)不受任何项目级配置影响,它的vendor始终在COMPOSER_HOME/vendor,想改得单独处理COMPOSER_HOME
路径越早定越好,初始化项目时就写进 composer.json,后期补救成本高,尤其当团队协作、CI 流水线、IDE 配置都已固化时,牵一发而动全身。










