vendor-dir 只能在全局 config.json 中生效,项目级 composer.json 中设置无效;必须通过 composer_home 指定配置路径,且 vendor-dir 值须为绝对路径。

vendor-dir 只能在全局 config.json 里生效
项目级 composer.json 中写 "vendor-dir" 完全无效,这是 Composer 的硬性限制,不是配置遗漏或权限问题。执行 composer install 后仍生成 vendor 目录,说明你误把配置放到了项目文件里。
真正起作用的只有两处:COMPOSER_HOME/config.json(用户级)或 /etc/composer/config.json(系统级,Linux/macOS)或 C:\ProgramData\ComposerSetup\config.json(Windows 系统级)。优先级上,COMPOSER_HOME/config.json 覆盖系统级配置。
-
COMPOSER_HOME必须先设置,否则 Composer 不会读取其下的config.json - 该
config.json文件必须是合法 JSON,且顶层是{"config": {...}}结构 -
vendor-dir值必须为绝对路径(如/opt/shared-vendor或C:/shared-vendor),相对路径会被忽略
设置 COMPOSER_HOME 并初始化全局 config.json
Windows 用户在 CMD 或 PowerShell 中运行:
set COMPOSER_HOME=C:\my-composer-home
mkdir C:\my-composer-home
echo {"config": {"vendor-dir": "C:/shared-vendor"}} > C:\my-composer-home\config.json
Linux/macOS 用户在终端中运行:
export COMPOSER_HOME="/home/username/my-composer-home"
mkdir -p "$COMPOSER_HOME"
echo '{"config": {"vendor-dir": "/opt/shared-vendor"}}' > "$COMPOSER_HOME/config.json"
注意:COMPOSER_HOME 仅在当前终端会话有效;要永久生效,需写入系统环境变量(Windows)或 shell 配置文件(如 ~/.bashrc)。
- 设置后务必验证:运行
composer config --list | grep vendor-dir,应输出你指定的路径 - 若输出仍是
vendor,说明COMPOSER_HOME未生效,或config.json路径/格式有误 - 不要用双引号包裹整个 JSON 字符串再重定向,容易引入不可见字符;建议用单引号(Linux/macOS)或手动创建文件
软链接方案:保留 vendor 目录名但指向统一路径
某些工具(如 PHPStan、Xdebug 路径映射、IDE 自动索引)强依赖 vendor 这个目录名。此时不能删除它,但可以把它变成符号链接,指向全局 vendor-dir。
Linux/macOS:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
rm -rf vendor ln -s /opt/shared-vendor vendor
Windows(管理员权限 CMD):
rmdir vendor mklink /D vendor C:\shared-vendor
这个操作对 Composer 透明——它照常往全局路径写包,而项目里始终存在名为 vendor 的目录,只是内容来自共享位置。
- 每次新建项目后都需手动建一次软链;可写成脚本自动执行
- Git 不跟踪软链接目标,只记录链接本身,协作时需确保团队成员也配置了相同全局路径
- Windows 上
mklink需管理员权限,普通用户可用junction(需下载 Sysinternals 工具)替代
为什么不用项目级 vendor-dir?哪些配置能放 composer.json 里?
vendor-dir 是 Composer 运行时的底层路径策略,涉及 autoloader 生成、bin 脚本解析、插件加载等环节,必须在初始化阶段就确定,因此只允许在全局/系统级配置中声明。
项目级 composer.json 支持的配置项包括:
-
bin-dir:控制vendor/bin下可执行文件的存放位置 -
process-timeout:命令执行超时时间 -
fxp-asset相关配置(已弃用,但旧项目可能还在用) -
platform:用于声明目标运行环境(如 PHP 版本),影响依赖解析
试图在项目中覆盖 vendor-dir 不仅无效,还会干扰团队协作——别人拉代码后执行 composer install,仍然走默认路径,导致依赖不一致。
真正麻烦的地方不在配置本身,而在路径一致性:全局 vendor-dir 必须对所有 PHP 版本、所有项目、所有开发者都可写且可读;一旦某台机器权限不对,或路径被误删,所有项目都会报错“Class not found”。这点比改配置难调试得多。










