唯一可靠方式是composer_home配合全局config.json设置vendor-dir;项目级vendor-dir仅首次install生效,composer_vendor_dir虽优先级高但不推荐;路径变更后须同步更新autoload.php引用、bin-dir配置及ide索引路径。

COMPOSER_HOME + config.json 是唯一可靠方式
想让所有项目共用一个集中 vendor 目录,不能靠改项目级 composer.json,也不能用 -d 参数——它只换工作目录,不换安装路径。真正生效的只有 COMPOSER_HOME 配合全局 config.json。
核心逻辑是:Composer 把 COMPOSER_HOME 当作自己的“家”,里面放配置、缓存、全局命令;而 config.json 里的 vendor-dir 才真正决定依赖装哪。
- Linux/macOS:运行
export COMPOSER_HOME="/opt/my-composer",再在该目录下创建config.json,内容为:{"config": {"vendor-dir": "/opt/shared-vendor"}} - Windows:设置环境变量
COMPOSER_HOME=C:\my-composer,然后在该目录下放同结构的config.json - 必须重启终端或重新加载 shell 配置(如
source ~/.zshrc),否则COMPOSER_HOME不生效
为什么不能直接改项目 composer.json 的 vendor-dir
项目级 composer.json 中的 "config": {"vendor-dir": "xxx"} 确实能生效,但只在 vendor 不存在时起作用——也就是首次 install。一旦已有 vendor,后续 update 或 require 仍写入原路径,不会迁移。
更关键的是:这种配置无法实现“全局共享”,每个项目还是各自一套依赖,磁盘和网络开销没降下来。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 常见错误:在项目里写了
vendor-dir,执行composer update后发现包还在vendor/里——因为目录已存在,配置被跳过 - 若真要项目级切换,必须先
rm -rf vendor composer.lock,再composer install - 此时还要同步改代码中
require 'vendor/autoload.php'为新路径,否则类加载失败
COMPOSER_VENDOR_DIR 环境变量优先级最高但不推荐
COMPOSER_VENDOR_DIR 是 Composer 官方支持的环境变量,它比 config.json 里的 vendor-dir 优先级更高,且对所有命令(install、update、require)都生效。
但它的问题在于:一旦设了,所有项目都强制走这个路径,没法按项目区分;而且它绕过了 Composer 的配置体系,不利于协作和 CI 流水线可复现性。
- Linux/macOS 示例:
export COMPOSER_VENDOR_DIR="/data/composer-vendor" - Windows 示例:
set COMPOSER_VENDOR_DIR=C:\composer-vendor - 它不依赖任何配置文件,也不需要
config.json,但每次都要确保环境变量已加载 - CI 脚本里硬编码这个变量容易出错,不如用
COMPOSER_HOME方式统一管理
全局路径改动后必须处理的三件事
无论用哪种方式改了全局 vendor 路径,以下三点不处理,90% 的问题都会出现在 autoload 或 bin 调用上:
-
vendor/autoload.php路径变了 → 所有require 'vendor/autoload.php'必须改成新路径,比如require '/opt/shared-vendor/autoload.php' -
bin-dir默认还是指向vendor/bin→ 如果你希望命令软链到统一位置,得在全局config.json里显式加"bin-dir": "/opt/shared-vendor/bin" - IDE(如 PHPStorm)默认只索引
vendor→ 需手动在Settings → PHP → Include Paths中添加新路径,否则跳转和补全失效
最易被忽略的是第三点:本地开发看着正常,一进 CI 就报 Class not found,往往不是路径错了,而是 IDE 或构建环境没同步索引新 vendor 目录。










