config.vendor-dir是composer 2.x中唯一真正生效的vendor路径配置,必须写在项目根目录composer.json的config字段下、用相对路径、且安装前需删除旧vendor目录。

config.vendor-dir 是唯一真正生效的全局路径配置
想让所有包都进 third-party 或 libs,只能靠项目根目录 composer.json 里的 config.vendor-dir。其他方式——比如 COMPOSER_VENDOR_DIR 环境变量、composer install -d 参数、全局配置——在 Composer 2.x 中已被移除或静默忽略。
它必须同时满足三个条件才起作用:
- 写在项目根目录
composer.json最外层的config字段下,不能错放到extra或缩进错误 - 值必须是相对路径(如
"libs"),不能以/开头,也不支持$HOME或通配符 - 运行
composer install前,旧vendor目录必须已删除;composer update不会迁移已有包
改完后,autoload.php、bin/ 下的可执行文件、自动加载映射全都会生成到新路径,但 PHP 代码里所有 require 'vendor/autoload.php' 都得手动改成新路径,IDE 和 CI 脚本同理。
installer-paths 只对 type 匹配的包生效
extra.installer-paths 看起来像“按包指定路径”,但它根本不是通用路径重定向机制。它只在满足以下全部条件时触发:
- 目标包的
composer.json明确声明了type(如"wordpress-plugin") - 你的项目已通过
composer require composer/installers(或专用 installer 如wpackagist/installer)引入对应 installer -
installer-paths的键是相对于项目根的路径,值中包名必须完全匹配(区分大小写),且不能用通配符写成"myorg/*"——除非你同时在包里自定义了type并在installer-paths中显式映射该type
普通库(type: library)哪怕写进 installer-paths 规则里,也照旧进 vendor。这是最常被误解的一点:它不是“包名路由表”,而是“installer 类型分发器”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
path 仓库类型需三处 name 完全对齐
用 repositories 配 "type": "path" 引入本地包,不是加个配置就完事。必须三处 name 严格一致:
- 本地包
composer.json的name字段(如"acme/utils") - 主项目
composer.json中repositories的url路径(如"../acme-utils") - 主项目
require中写的包名字符串("acme/utils": "dev-main")
错一个就静默失败,现象是 composer install 后 vendor/acme/utils 为空,或装了 Packagist 上的老版本。本地包还必须有合法 composer.json、至少一个 Git commit、name 全小写+短横线、version 显式设为 "dev-main"。
改 vendor-dir 后 autoload 和 bin 都要手动适配
config.vendor-dir 改了,vendor/autoload.php 就变成 third-party/autoload.php ——但这个路径是生成时硬编码的,不会自动更新。所以:
-
require 'vendor/autoload.php'必须全部改成新路径 - 如果用了
bin-dir,必须同步在config里配好,例如:"bin-dir": "third-party/bin",否则phpunit这类命令链接会断 -
composer dump-autoload不够,它只刷新类映射,不重建入口文件;必须删掉整个vendor目录再composer install - IDE(如 PHPStorm)默认只索引
vendor,需手动添加新路径到Settings → PHP → Include Paths
真正想物理隔离依赖?别依赖 vendor-dir,更稳的做法是保持默认 vendor,安装完用符号链接指向外部目录——路径可控,且不破坏任何 Composer 内部逻辑。










