vendor-dir配置仅在vendor不存在时生效,需先删除vendor和composer.lock再运行composer install;同时须同步更新autoload.php路径、bin-dir及ide配置。

vendor-dir 配置只在 vendor 不存在时生效
改 composer.json 里的 "config": {"vendor-dir": "third-party"} 不会移动已有 vendor,也不会让下次 composer update 写进新路径。它只在首次安装或重装时起作用。
常见错误现象:composer install 后还是生成 vendor/ 目录,新配置毫无反应——大概率是没清空旧 vendor 和 composer.lock。
- 必须先执行
rm -rf vendor composer.lock - 再运行
composer install(不是update) - 确保
composer.json中该配置已提交且未被 .gitignore 忽略
autoload.php 路径必须手动同步更新
vendor/autoload.php 是硬编码路径的入口文件,改了 vendor-dir 后,它就变成 third-party/autoload.php。代码里所有 require 'vendor/autoload.php' 都得改,否则直接报错 failed to open stream: No such file or directory。
- 全局搜索替换
vendor/autoload.php→third-party/autoload.php(或你设的实际路径) - CI/CD 脚本、Dockerfile、部署钩子中硬编码的路径也得一并改
- PHPStorm 等 IDE 默认只索引
vendor/,需手动在 Settings → PHP → Include Paths 中添加新路径
bin-dir 不配等于白配
很多包(如 phpunit、laravel-zero)通过 "bin" 字段声明可执行文件,Composer 默认把它们链接到 vendor/bin/。你只改了 vendor-dir,没配 bin-dir,这些链接就全断了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
正确写法是同时指定:
"config": {
"vendor-dir": "third-party",
"bin-dir": "third-party/bin"
}
- 改完必须删掉整个
vendor重装,否则third-party/bin/不会自动生成 -
composer create-project可能忽略bin-dir,安装完务必检查third-party/bin/下是否存在对应二进制文件 - 脚本里调用
vendor/bin/phpunit的地方,要改成third-party/bin/phpunit
别信 COMPOSER_HOME 或 -d 参数能改 vendor 位置
COMPOSER_HOME 控制的是 Composer 自身缓存、全局命令和配置存放位置,不影响项目依赖安装路径;composer install -d /path 只是告诉 Composer 去哪找 composer.json,vendor 还是照常写进当前项目的 vendor/(或已配置的 vendor-dir)。
常见误操作:
- 在 CI 脚本里加
-d /tmp/build却没配vendor-dir,结果运行时报Class not found - 把
COMPOSER_HOME指向共享目录,以为能共用 vendor,其实只是挪了缓存,每个项目仍各自装一份 - 试图用
extra.installer-paths改普通 library 的安装位置——它只对特定type(如wordpress-plugin)生效,对monolog/monolog这类包完全无效
真正需要物理隔离时,符号链接比改配置更可靠:先在统一位置装好依赖,再用 ln -s /shared/vendor ./vendor 挂载,避免路径散落、IDE 失效和脚本断裂。但注意软链目标权限和跨文件系统兼容性。










