vendor目录路径无法一键切换,必须修改composer.json的config.vendor-dir字段并重新执行composer install;仅改配置不删旧vendor或不用install会导致新路径无效。

vendor 目录路径不能靠修改某个“配置项”一键切换,必须通过 composer.json 的 config.vendor-dir 字段 + 重新安装依赖来生效。
为什么改了 composer.json 但 vendor 没变?
Composer 只在执行 composer install 或 composer update 时读取 config.vendor-dir 并创建目录;已存在的 vendor 不会自动移动或重命名。
- 直接改
composer.json后不重装,旧vendor仍被使用,新路径被忽略 -
composer dump-autoload或composer require也不会触发路径变更 - 若旧
vendor存在且未删,Composer 会继续写入其中,新配置形同虚设
正确修改步骤(含风险提醒)
必须按顺序操作,跳过任一环节都会导致依赖加载失败或路径混乱:
- 编辑项目根目录下的
composer.json,在config对象中添加或修改:"config": { "vendor-dir": "lib/vendor" }(路径支持相对路径,不以/开头;不支持环境变量或通配符) - 手动删除现有
vendor目录(重要:不删则新路径不会启用) - 运行
composer install(不是update),让 Composer 按新路径重建依赖 - 检查
autoload.php路径是否同步更新——它会自动指向新vendor下的autoload.php,无需手动改require
常见副作用与兼容性注意点
路径变更会影响多个外部环节,容易被忽略:
- IDE(如 PHPStorm)可能缓存旧
vendor的类索引,需手动刷新或重启 - 部署脚本若硬编码了
vendor/autoload.php,要同步改为lib/vendor/autoload.php - 某些插件(如
phpstan、psalm)默认扫描vendor,需在各自配置中显式指定新路径 -
composer global不受项目级vendor-dir影响,它始终用全局~/.composer/vendor
真正起作用的只有 config.vendor-dir 这一个字段,不存在“其他隐藏配置项”;所有所谓“动态切换 vendor 路径”的方案,本质都是绕过 Composer 原生机制,后期维护成本高、易出错。










