composer install 默认将 vendor 目录创建在当前工作目录下,即执行命令时所在的项目根目录;需手动 cd 到 D 盘目标路径再运行命令,而非修改 Composer 安装位置或环境变量。

composer install 默认装在哪?先看环境变量
Composer 本身没有“安装到 D 盘”的概念——它是个 PHP 脚本,真正决定位置的是你运行 php composer.phar install 或 composer install 时所在的目录,以及项目 composer.json 中的配置。所谓“装到 D 盘”,其实是你想把项目(含 vendor)放在 D 盘某路径下。
常见错误现象:composer install 报错 Could not open input file: composer.phar,或装完发现 vendor 出现在 C 盘用户目录下,其实是当前终端没切到目标路径,或者用了全局 alias 却没改环境变量。
- Windows 下默认会把全局
composer命令指向C:\Users\{user}\AppData\Roaming\Composer\vendor\bin\composer.bat,但这只是启动器,不决定项目位置 - 真正影响
vendor存放位置的是执行命令时的当前工作目录(pwd),不是 Composer 自身安装路径 - 如果用
composer create-project,项目根目录就是你指定的位置;install则严格依赖当前目录是否有composer.json
想让 vendor 在 D 盘?cd 进去再跑 install
最直接、最可靠的方式:把终端切到 D 盘的目标文件夹,再执行命令。别指望改某个配置让所有项目自动跳到 D 盘——Composer 没这机制,强行改反而容易破坏 autoload。
使用场景:新建 Laravel 项目、克隆开源库、本地调试依赖等。
- 打开 CMD/PowerShell,执行
cd /d D:\my-project(注意/d切换盘符) - 确认当前目录有
composer.json,没有就先composer init或git clone - 运行
composer install——此时vendor必然生成在D:\my-project\vendor - 如果提示
command not found,说明没配全局composer,直接用php composer.phar install(前提是composer.phar在当前目录或 PATH 里)
修改 composer home 路径?只影响全局配置和缓存
COMPOSER_HOME 环境变量控制的是 Composer 自己的配置、插件、缓存存放位置(比如 auth.json、cache/),跟项目 vendor 无关。改它不会让 install 自动跳到 D 盘,但能减少 C 盘占用。
参数差异:COMPOSER_HOME 是 Composer 运行时读取的环境变量;COMPOSER_CACHE_DIR 可单独设缓存路径,优先级更高。
- Windows 设置:在系统属性 → 环境变量 → 新建用户变量
COMPOSER_HOME=D:\composer-home - 重启终端后,运行
composer config --list查看home是否已变;composer clear-cache会清掉新路径下的缓存 - 注意:改完后旧
auth.json不会自动迁移,要手动复制过去,否则私有包认证失败 - 某些 IDE(如 PHPStorm)可能缓存旧路径,需重启或刷新 Composer 配置
vendor 路径能硬指定吗?别碰 autoload-dev 和 symlink
Composer 提供了 config.vendor-dir,理论上可改 vendor 位置,但强烈不建议在常规项目中用。它会干扰自动加载逻辑、破坏 symlink 行为、导致部分插件失效,尤其在 Windows 上容易出权限或路径长度问题。
性能 / 兼容性影响:Laravel、Symfony 等主流框架的脚手架和部署工具(如 Envoyer)都假设 vendor 在项目根目录;CI/CD 流水线也默认扫描该路径。
- 如真要试,执行
composer config vendor-dir "D:/shared-vendor",但必须确保该路径可写且无中文空格 - 改完后
autoload.php里的路径会变,require_once 'vendor/autoload.php'就会报错,得同步改所有入口文件 - Windows 下启用
config.symlinks true可能因权限失败,报错failed to create symbolic link - 绝大多数“需要多项目共用 vendor”的需求,实际应通过
composer global require或私有 Packagist 解决,而非挪路径
真正复杂的是跨盘符符号链接和长路径支持——Windows 默认禁用开发者模式时,mklink 会失败,而 Composer 的 symlink 逻辑又依赖它。这事没捷径,要么关 UAC 改策略,要么接受 vendor 就在项目目录里。










