config.vendor-dir 是唯一真正生效的项目级 vendor 路径配置,须在项目根目录 composer.json 的 config 字段下用相对路径设置(如 "third-party"),并删除旧 vendor 后执行 install 才生效。

config.vendor-dir 是唯一真正生效的项目级 vendor 路径配置
想让当前项目所有包装进 third-party 或 libs,只能在项目根目录的 composer.json 里写死 "config": {"vendor-dir": "third-party"}。其他方式——比如 COMPOSER_VENDOR_DIR 环境变量、composer install -d 参数、全局 config.json —— 在 Composer 2.x 中全部失效或被忽略。
必须满足三个条件才起作用:
- 配置放在
composer.json最外层config字段下,不能缩进错位,也不能塞进extra - 值必须是相对路径(如
"libs"),不能以/开头,不支持~或$HOME - 改完后必须删掉整个旧
vendor目录,再跑composer install;composer update不会迁移已有包
改完后,third-party/autoload.php 才是真实入口,所有 require 'vendor/autoload.php' 都得手动改成新路径,IDE 和 CI 脚本同理。
COMPOSER_HOME 决定全局配置和缓存根目录
COMPOSER_HOME 是 Composer 启动时第一优先级读取的硬性路径,设了就用它,不设才 fallback 到默认位置(~/.composer 或 %APPDATA%\Roaming\Composer)。它不是可选配置项,而是唯一权威路径来源。
常见误操作:
- 只设环境变量但没手动迁移
auth.json和config.json→ Composer 静默失败,报Could not authenticate against repo.example.com - 用
~/my-composer这类波浪号路径 → 某些 CI 工具或脚本里 shell 解析失败 - 临时
export后没新开终端 → IDE、后台任务、CI 全部不生效
验证是否生效:运行 composer config --global home,输出必须和 echo $COMPOSER_HOME(Linux/macOS)或 echo %COMPOSER_HOME%(Windows)一致。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
cache-files-dir 必须显式指向 files 子目录
Composer 下载的 zip 包和解压后的 dist 文件,实际存在 cache-files-dir 下,而不是 cache-dir 根目录。只配 cache-dir 是无效的——它只是父容器,真正起作用的是 cache-files-dir,且必须明确指向其下的 files/ 子目录。
正确写法示例:
- Linux/macOS:
composer config --global cache-files-dir ~/.composer/cache/files - Windows:
composer config --global cache-files-dir "%APPDATA%\Composer\Cache\files"(注意:PowerShell 中%APPDATA%不自动展开,建议先查清真实路径)
如果 composer config -g cache-files-dir 输出为空,说明该配置未设置,缓存将 fallback 到默认行为,下载包不会被复用。改完后务必执行 composer clear-cache 再跑一次 composer install,然后检查目标路径下是否生成了哈希命名的 .zip 文件(如 2a/2a3b4c5d.zip)。
installer-paths 只对声明 type 的包生效,不是通用路径路由
extra.installer-paths 看起来像“按包名指定安装路径”,但它根本不是通用重定向机制。它只在满足以下全部条件时触发:
- 目标包的
composer.json明确声明了type(如"wordpress-plugin") - 你的项目已通过
composer require composer/installers引入对应 installer(且版本 ≥ 2.0) - 删掉整个
vendor目录和composer.lock,再跑composer install(它不会重排已有包)
普通库(type: library)哪怕写进 installer-paths 规则里,也照旧进 vendor。这是最常被误解的一点:它不是“包名路由表”,而是“installer 类型分发器”。
复杂点在于路径和引用的耦合性——改 vendor-dir 后,autoload.php、bin 目录、IDE 索引、部署脚本、甚至第三方工具(如 PHPStan、Psalm)的配置都得同步更新,漏一处就可能在上线时突然报 Class not found。










