
最稳妥方式是在 composer.json 中配置 config.vendor-dir 为相对路径(如 "lib/vendor"),需确保父目录存在;环境变量 COMPOSER_VENDOR_DIR 可临时覆盖,全局配置不推荐;路径变更后必须执行 composer install/update 以重新生成 autoload.php。
config.vendor-dir 指定路径最稳妥这是官方支持且项目级生效的方式,修改后所有 composer install 和 composer 都会把包装到新位置。直接在项目根目录的 
composer.json 中加配置:
{
"config": {
"vendor-dir": "lib/vendor"
}
}
注意:vendor-dir 值必须是相对路径(不能以 / 开头),且不能包含 .. 回退;Composer 不会自动创建父目录,lib/ 得提前存在,否则报错 Could not create directory。
COMPOSER_VENDOR_DIR 环境变量临时覆盖适合 CI/CD 或多环境切换场景,优先级高于 composer.json 里的配置。执行命令前设置即可:
COMPOSER_VENDOR_DIR=./packages composer install
Windows 下用 set COMPOSER_VENDOR_DIR=.\packages(cmd)或 $env:COMPOSER_VENDOR_DIR=".\packages"(PowerShell)。该变量只影响当前命令,不写入配置,也不影响其他项目。
composer config -g 一般不推荐运行 composer config -g vendor-dir /path/to/global/vendor 会修改全局 ~/.composer/config.json,导致所有项目默认走这个路径。问题在于:
src 平级,有的要嵌套进 third-party)vendor 路径错乱、自动加载失败autoload 生成的 vendor/autoload.php 路径硬编码在 vendor/composer/autoload_*.php 里,换路径后旧 autoload 文件不会自动更新class not found
Composer 不会自动重写 vendor/autoload.php 的内部路径逻辑。只要 vendor-dir 变了,就得强制刷新自动加载器:
vendor 目录(如果还存在)composer dump-autoload 不够——得跑完整 composer install 或 composer update
vendor/autoload.php 文件头是否指向正确路径,比如 require __DIR__ . '/lib/vendor/composer/autoload_real.php';
漏掉这步,哪怕文件都下载对了,require 'vendor/autoload.php' 仍会因路径错误导致类加载失败。