Composer 2.0+ 中 config.vendor-dir 已彻底废弃,唯一可靠方式是环境变量 COMPOSER_VENDOR_DIR;单包路径需依赖 composer/installers 插件及 extra.installer-paths 配置,且仅对声明了特定 type(如 wordpress-plugin)的包生效。

Composer 没有“安装路径设置”的全局配置项,也没有命令行参数能直接指定 vendor 目录位置;所谓“自定义安装路径”,实际只有两种可靠路径:改整个项目的 vendor 目录(用 COMPOSER_VENDOR_DIR 环境变量或旧版 config.vendor-dir),或对特定 type 的包用 installer-paths 单独挪动——其他方式基本无效或已废弃。
composer.json 里的 config.vendor-dir 还管用吗
在 Composer 2.0+(当前主流版本)中,config.vendor-dir 已被彻底移除。你写进 composer.json 里,composer install 不会报错,但也不会生效,反而会输出警告:The "config.vendor-dir" option is deprecated, use the "COMPOSER_VENDOR_DIR" environment variable instead.
- 该配置项只在 Composer 1.x 中有效;2026 年所有稳定发行版(包括 2.5、2.6)均不再识别它
-
composer diagnose会明确标出这一项为弃用配置 - 即使你删了
vendor/再跑composer install,包依然会装进默认vendor/,不是你写的路径
COMPOSER_VENDOR_DIR 是唯一靠谱的环境级方案
COMPOSER_VENDOR_DIR 是 Composer 2.0+ 官方唯一支持、全命令生效(install、update、require 都认)的 vendor 路径控制方式。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- Linux/macOS:
COMPOSER_VENDOR_DIR=lib/vendor composer install - Windows CMD:
set COMPOSER_VENDOR_DIR=lib/vendor && composer install - PowerShell:
$env:COMPOSER_VENDOR_DIR="lib/vendor"; composer install - 路径支持相对路径(如
lib/vendor)和绝对路径(如/var/www/myapp/lib/vendor),但避免以/开头的“伪绝对路径”(如/lib/vendor),否则 Windows 下可能解析失败 - 该变量优先级高于项目配置;一旦
composer.json里存在config.vendor-dir,它会被忽略(不是覆盖,是跳过)
installer-paths 只对特定 type 的包生效
installer-paths 不是“把任意包装到任意目录”的通用开关,它依赖 composer/installers 插件 + 包自身声明的 type 字段(如 wordpress-plugin、drupal-module),普通 library 类型包默认不触发。
- 必须先运行
composer require composer/installers,否则extra.installer-paths配置完全无效 - 目标包的
composer.json必须声明匹配的type,例如:{"type": "wordpress-plugin"} - 路径中可用
{$name}或{$vendor}占位符,但路径必须以/结尾(如wp-content/plugins/{$name}/) - 想让私有包走定制路径?得在它的
composer.json里设一个新type(如myapp-extension),再在主项目extra.installer-paths中映射该 type
改完路径后 Class not found 是最常踩的坑
无论用 COMPOSER_VENDOR_DIR 还是 installer-paths,Composer 都不会自动修复你代码里硬编码的路径引用。
-
require 'vendor/autoload.php'必须手动改成require 'lib/vendor/autoload.php',或改用动态拼接:require __DIR__ . '/lib/vendor/autoload.php'; -
vendor/bin/phpunit要同步改为lib/vendor/bin/phpunit,CI 脚本、$PATH、Makefile、Dockerfile 全得扫一遍 - PHPStorm 默认只索引
vendor/,需手动在Settings → PHP → Include Paths中添加新路径 - 某些框架脚本(如 Laravel 的
artisan或 Symfony 的console)内部拼了vendor字符串,得查源码或 patch
真正麻烦的从来不是“怎么改路径”,而是“改完之后,有多少地方悄悄依赖了 vendor 这个字符串”。漏掉一处,就 Class not found。

















