vendor目录路径由composer.json中config.vendor-dir控制,仅首次install时生效;改配置后必须删除旧vendor和composer.lock再运行composer install,否则仍复用旧路径,且autoload.php、bin路径及工具链均需同步更新。

Composer 的 vendor 目录路径不能通过命令行参数或安装时临时指定,它由 composer.json 中的 config.vendor-dir 控制,且只在 vendor 不存在时生效——改了配置却没清空旧 vendor,新路径就永远不生效。
vendor-dir 配置只在首次安装时起作用
这个字段不是运行时开关,而是初始化策略。Composer 检测到项目根目录下已有 vendor 文件夹,就会直接复用它,完全忽略 config.vendor-dir 的值。
- 已执行过
composer install?必须先手动删除vendor和composer.lock - 修改
composer.json,确保config是顶层字段,例如:{ "config": { "vendor-dir": "third-party" } } - 再运行
composer install,依赖才会真正落到third-party/ - 如果只跑
composer update,哪怕vendor已删,它也不会重走初始化逻辑,仍可能报错或沿用旧路径
autoload.php 和 bin 路径必须同步改
改了 vendor-dir 后,vendor/autoload.php 这个路径就失效了——自动加载器不会自动“猜”你把 vendor 搬去哪了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 所有
require 'vendor/autoload.php'都得改成require 'third-party/autoload.php' -
bin目录下的可执行文件(如phpunit、laravel)也会生成在新路径下,比如third-party/bin/phpunit - IDE(如 PHPStorm)的自动导入、类跳转会断,需手动刷新索引或重新配置 include path
- CI/CD 脚本里硬编码的
vendor/bin/xxx调用也得同步更新
团队协作时 vendor-dir 不是透明的
这个配置只影响当前项目,但它的副作用会穿透到代码、工具链和部署流程中。
-
.gitignore里如果还写的是/vendor,新路径/third-party就会被意外提交 - 某些 Composer 插件(如
hirak/prestissimo)或自定义脚本可能假定vendor在默认位置,出现静默失败 - PHPStan、Psalm 等静态分析工具需要显式配置 autoload 路径,否则找不到类
- 不要在
composer.json里用相对路径如"vendor-dir": "../libs"——跨平台时 Windows 和 Linux 的路径解析行为不一致,容易出问题
最常被忽略的一点:改完 vendor-dir 后,composer dump-autoload 生成的自动加载映射文件(vendor/composer/autoload_*.php)会出现在新目录下,但旧 vendor 若残留未清,某些 IDE 或调试器仍可能读取旧映射,导致类存在却提示 “class not found”。动手前务必确认旧 vendor 和 composer.lock 都已彻底移除。

















