config.vendor-dir 是唯一真正生效的路径配置项,必须在项目根目录 composer.json 的 config 字段下设相对路径,且需删除旧 vendor 后重装并更新所有引用和 ide 配置。

config.vendor-dir 是唯一真正生效的路径配置项
想让所有包装进 third-party 或 libs 而不是默认 vendor,只能靠项目根目录 composer.json 里的 config.vendor-dir。其他方式——比如环境变量 COMPOSER_VENDOR_DIR、命令行 -d 参数、全局 config——在 Composer 2.x 中要么被移除,要么被静默忽略。
必须同时满足三个条件才生效:
- 配置写在项目根目录
composer.json最外层的config字段下,不能错放到extra或缩进错误 - 值必须是相对路径(如
"libs"),不能以/开头,也不支持$HOME或通配符 - 运行
composer install前,旧vendor目录必须已删除;composer update不会迁移已有包
改完 vendor-dir 后 autoload.php 为什么还报错
因为 vendor/autoload.php 是安装时硬编码路径生成的入口文件。你改了 vendor-dir,但没重建整个 vendor 结构,旧文件还在原地,PHP 还在找原来的路径。
composer dump-autoload 不够——它只刷新类映射(autoload_classmap.php 等),不重建入口文件或符号链接。
必须做三件事:
- 手动删掉现有
vendor目录 - 执行
composer install或composer update - 把代码里所有
require 'vendor/autoload.php'改成新路径,比如require 'third-party/autoload.php'
IDE(如 PHPStorm)默认只索引 vendor,需手动在 Settings → PHP → Include Paths 中添加新路径。
bin 文件调不了?别漏了 bin-dir 配置
部分包(如 phpunit、laravel-zero)在 composer.json 里声明了 "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 中同时指定:
"config": {
"vendor-dir": "third-party",
"bin-dir": "third-party/bin"
}
如果用了 composer create-project,它首次安装可能忽略 bin-dir 配置,建议安装完手动检查 third-party/bin/ 是否存在对应文件。CI 脚本或部署命令中硬编码的 vendor/bin/phpunit 必须同步更新为 third-party/bin/phpunit。
path 仓库的 url 路径写法极易出错
path 类型仓库的 url 必须是相对于项目根目录的路径,不能带 file://,也不能用绝对路径。写成 "./modules/user" 才有效;写成 "/modules/user"、"C:\modules\user" 或 "file:///home/user/project/modules/user" 会静默跳过,不报错也不提示。
验证方式很简单:在项目根目录执行 ls -la ./modules/user,能列出内容才算路径可达。
还要注意两点:
-
repositories数组必须写在主项目根目录composer.json中,子模块自己的composer.json里写无效 - 本地包目录下必须有合法
composer.json,且其中name字段要和require中的包名完全一致(大小写敏感)
路径配置错一个字符,composer install 就当它不存在——没有警告,也没有 fallback。










