默认安装到 vendor 目录,可通过 composer.json 的 config.vendor-dir 设置(如 "lib/vendor")更改,或用 COMPOSER_VENDOR_DIR 环境变量覆盖;修改后需删除旧 vendor 并重装,且需同步更新代码中 autoload.php 路径引用。

composer install 默认把包装到哪个目录
默认就是 vendor 目录,这是硬编码在 Composer 源码里的路径,不能通过命令行参数临时改。想换位置,必须靠配置文件控制。
用 composer.json 的 config.vendor-dir 改安装路径
这是最常用、也最推荐的方式。在项目根目录的 composer.json 里加一段配置:
{
"config": {
"vendor-dir": "lib/vendor"
}
}
之后运行 composer install 或 composer update,所有包就会装进 lib/vendor 而不是默认的 vendor。注意:vendor-dir 值必须是相对路径(不以 / 开头),且不能包含 .. 向上跳转。
- 如果项目已存在
vendor目录,改完配置后要先删掉它,再重新install - 这个配置只对当前项目生效,不影响全局行为
- PHP 自动加载器(如
autoload.php)会自动适配新路径,不用手动改 require
用 COMPOSER_VENDOR_DIR 环境变量覆盖路径
适合 CI/CD 或临时调试场景,优先级高于 composer.json 里的 config.vendor-dir:
COMPOSER_VENDOR_DIR=third-party composer install
或者在 Linux/macOS 下持久设置:
export COMPOSER_VENDOR_DIR=third-party
Windows 用户用 set COMPOSER_VENDOR_DIR=third-party(CMD)或 $env:COMPOSER_VENDOR_DIR="third-party"(PowerShell)。
- 环境变量方式对
composer dump-autoload也生效 - 如果同时设了环境变量和
composer.json,环境变量胜出 - 某些共享主机不支持自定义环境变量,这时只能靠
composer.json
改 vendor 目录名后要注意的几件事
名字变了,但 Composer 不会自动帮你改代码里写死的路径引用。最容易出问题的是:
-
require 'vendor/autoload.php'这类语句——必须同步改成require 'lib/vendor/autoload.php' - IDE(如 PhpStorm)的自动补全可能缓存旧路径,需要刷新索引或重置 vendor 目录识别
- 部署脚本里硬编码的
vendor路径(比如 rsync 排除规则、Docker COPY 指令)都要检查一遍 -
composer global不受项目级配置影响,它的 vendor 始终在全局目录(如~/.composer/vendor)
路径改得越早越好,项目刚初始化时就定下来,后期迁移成本最低。










