镜像配置仅改变下载源,不自动加速缓存;缓存复用依赖 dist url 哈希,换源后需更新 composer.lock 中的 dist.url 才生效。

镜像配置本身不产生缓存,只改变下载源头
很多人以为配了阿里云镜像源,缓存就“自动变快”了——其实镜像配置只是告诉 Composer “去哪下”,并不直接写入或加速缓存。真正起作用的是:你从哪个源下载的 zip 包,就会以该源 URL 的哈希为 key 存进 cache/files/;换源后,即使包名版本一样,也会被当作新文件重新下载、重新缓存。
常见错误现象:
- 换镜像后
composer install --prefer-dist依然慢 → 实际是旧缓存没命中,因为新镜像 URL 哈希不同 -
composer config -g repo.packagist返回正常,但composer update还卡在 Loading repositories → 镜像 URL 少了末尾/,导致 404 后静默 fallback 到 packagist.org
关键点:
- 镜像 URL 必须带
/结尾(如https://mirrors.aliyun.com/composer/),否则元数据请求失败 - type 必须显式设为
composer,不能省略或写成packagist - 验证是否生效:运行
composer config -g repo.packagist,输出必须是完整 JSON 对象,不是字符串或空值
缓存能复用的只有 files/ 下的 zip 包
Composer 缓存目录(默认 ~/.composer/cache)里混着 repo/(元数据)、vcs/(Git 克隆)、files/(dist zip)三类数据。但真正能离线复用、跨机器迁移、打包带走的,只有 files/ 子目录下的 zip 文件。
为什么改了 cache-dir 还没缓存?
-
cache-dir是混合路径,影响所有子目录;但只有files/下的 zip 能被--prefer-dist直接读取 - 若项目里写了
"config": { "cache-dir": false },全局配置会被覆盖,缓存彻底关闭 - CI 环境没挂载持久卷,或 PHP 进程用户对
~/.composer/cache无写权限 → 缓存静默失效,日志里不报错
实操建议:
- 清旧配置:
composer config --global --unset cache-dir - 专设离线路径:
composer config --global cache-files-dir /path/to/offline-cache - 触发下载:
composer install --no-autoloader --no-scripts --prefer-dist - 验证:
ls /path/to/offline-cache/monolog/monolog/2.10.0.0/应看到 zip 文件
多人共用缓存目录注定失败
试图让团队成员共享 ~/.composer/cache 或统一 COMPOSER_HOME,不是慢一点,而是直接失败。这不是配置问题,而是设计使然。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
根本原因:
-
auth.json存个人 token,共享等于泄露凭证 -
config.json里的 proxy、镜像地址、cache-dir 路径等,因网络环境不同必然冲突 -
cache/files/下 zip 的哈希校验依赖 PHP 版本、openssl 版本、甚至 glibc 小版本;A 机上校验通过,B 机上可能报Hash mismatch -
vendor/bin/里的全局命令是软链接,指向各自安装路径,共享会导致链接断裂
正确做法是「统一镜像 + 各自缓存」:
- 每人执行:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - CI 流水线中以普通用户身份运行,显式缓存
$COMPOSER_HOME/cache/和vendor/ - 本地开发可延长 TTL:
composer config -g cache-files-ttl 15552000(6 个月)
composer.lock 里的 dist URL 不会随镜像配置自动更新
这是最容易被忽略的坑:即使你配好了镜像源,composer.lock 里记录的 dist.url 字段仍可能是 https://packages.packagist.org/...。下次 composer install 时,Composer 会优先按 lock 文件里的 URL 下载,绕过你的镜像配置。
触发条件:
- 第一次生成
composer.lock时没配镜像源 - 团队成员镜像配置不一致,有人用阿里云、有人用腾讯云
- CI 构建时用了不同版本 Composer,解析逻辑有差异
解决办法:
- 配好镜像后,运行
composer update --lock(不改依赖,只刷新 lock 文件中的 dist URL) - 检查
composer.lock中任意包的dist.url,确认已变成镜像地址(如https://mirrors.aliyun.com/composer/...) - 提交
composer.lock,确保新人克隆后直接走镜像
复杂点在于:这个 URL 更新不是自动的,也不是每次 install 都重写,它只在 update 或首次生成 lock 时固化。一旦漏掉这步,镜像配置就形同虚设。










