vendor-dir 不影响依赖缓存复用,真正决定多项目是否共享下载包的是 cache-dir 和 cache-vcs-dir;前者控制 dist 包复用,后者控制 git 仓库克隆复用,且需独立配置、权限正确、路径有效。

不能用 composer config --global vendor-dir 实现多应用共享缓存——它只改全局命令的安装位置,不影响项目依赖缓存复用。 真正影响“多个项目是否共用同一份下载包”的,是 cache-dir 和 cache-vcs-dir,不是 vendor-dir。
为什么 vendor-dir 不管缓存复用?
vendor-dir 只控制 composer global require 安装的 CLI 工具(比如 laravel/installer)放在哪,和项目里的 composer install 下载的依赖完全无关。项目依赖始终走全局缓存路径,跟 vendor-dir 没关系。
常见误解:把 vendor-dir 设成 /shared/vendor,以为所有项目都能读写同一个 vendor 目录来“共享”。这是错的——Composer 不允许多个项目共用一个 vendor;每个项目必须有自己独立的 vendor,否则 autoload、autoload-dev、bin 符号链接都会冲突。
-
composer global config vendor-dir改的是~/.composer/vendor的位置,只影响composer global list里看到的那些命令 - 项目级
composer.json里的"config": {"vendor-dir": "..."}是单项目行为,不跨项目生效 - 哪怕所有项目都设了相同的
vendor-dir,Composer 也会拒绝安装,报错vendor directory is not empty
cache-dir 才决定包是否真正复用
多个项目能否跳过重复下载,全看它们是否命中同一个 cache-dir。只要缓存路径一致,composer install 就会从 archived/ 或 repo/ 里直接解压,而不是重新 fetch。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 优先用环境变量
COMPOSER_CACHE_DIR,它比composer config --global cache-dir优先级高,且不会被项目级配置覆盖 - 确认真实路径别信
composer config --global cache-dir,运行composer global show -v查Cache directory:那一行 - 路径必须存在、可写,且不能挂载在 NFS/VirtualBox Shared Folder 这类不支持硬链接或 chmod 的文件系统上
- 如果之前设过
cache-dir配置,先执行composer config --global --unset cache-dir再设环境变量,否则后者不生效
cache-vcs-dir 必须单独配,否则 Git 包白下
只配 cache-dir 不够。VCS 类型依赖(如 "package": {"type": "vcs", "url": "git@github.com:xxx/yyy"})会走另一套缓存逻辑,用的是 cache-vcs-dir,默认和 cache-dir 分开。
- 不配
cache-vcs-dir,每次composer update都会重 clone 整个仓库,哪怕 commit 没变 - 执行
composer config --global cache-vcs-dir "/path/to/vcs-cache"(建议绝对路径) - 该路径需足够大——Git 克隆副本通常比
dist包大 5–10 倍 - 确保和
cache-dir在同一块高性能磁盘上,避免 IO 成瓶颈
多用户共享时最易忽略的权限细节
即使 COMPOSER_CACHE_DIR 路径对所有用户可写,仍可能因 umask 或组权限失效:
- 所有用户需统一
umask 002,否则新建缓存文件默认无组写权限 -
cache-dir目录本身要设chmod g+s,保证新创建的子目录继承组 ID - 若用 Docker,
-v挂载的宿主机路径权限必须匹配容器内 UID/GID,否则写入失败 - Windows 上路径含空格时,
COMPOSER_CACHE_DIR不能加双引号,否则解析失败;应改用符号链接绕过
缓存路径设对只是第一步,真正卡住的往往是磁盘类型、权限继承、以及 VCS 缓存被遗忘——这三个点没处理好,再多配置也白搭。










