Composer不支持内置HTTP缓存代理,需通过环境变量(http_proxy/https_proxy)配合外部代理服务(如Nexus、Squid)实现,同时必须配置no_proxy避免绕过镜像、禁用TLS验证(若代理为HTTP),且代理须支持ETag/304;本地cache-dir权限错误或未启用将导致缓存失效。

缓存代理不是 Composer 内置功能,得靠环境变量和外部服务配合
Composer 本身不提供“缓存代理”服务,所谓代理缓存,其实是用 Nexus、Squid 或自建 HTTP 代理拦截 https://repo.packagist.org 的请求,并对响应做 Cache-Control 和 304 处理。你改 composer.json 没用,关键在运行时环境配置:
- 设
http_proxy和https_proxy环境变量,比如export https_proxy=http://127.0.0.1:8081 - 必须配
no_proxy="packagist.org,repo.packagist.org",否则镜像源请求也被转发,反而绕过国内镜像 - 若代理走 HTTP(非 HTTPS),需关 TLS 验证:
composer config --global disable-tls true,否则证书失败会退回到直连 - 代理服务本身要支持
ETag+Last-Modified+304 Not Modified,否则 Composer 每次都当新包重下
本地 cache-dir 配置错误,代理再快也白搭
很多团队只配了代理,却忽略 Composer 是否真在用本地缓存——新成员第一次 composer install 卡住,90% 是因为缓存根本没生效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config --global cache-dir,确认输出路径存在且可写(如~/.composer/cache) - 检查是否被设成
false或/dev/null:搜config项里有没有"cache-dir": false - CI 脚本或 Dockerfile 里是否误加了
--no-cache参数 - PHP 进程用户(如
www-data或容器内非 root 用户)对缓存目录无写权限,尤其在 WSL 或 Kubernetes 中常见
新成员初始化必须用 composer install,不能依赖 create-project 或 update
新人 clone 项目后第一件事是 composer install,不是 create-project,更不是 composer update。后者会重算依赖树,完全绕过团队共识的 composer.lock:
-
composer install才能复用已有dist包缓存(zip/tar)和vcs克隆缓存,跳过重复下载 - 若项目未提交
composer.lock,install会 fallback 成update,等于让新人自己解依赖 —— 这是团队协作最大隐患 - 确保
.gitignore没把composer.lock忽略掉;CI 第一步建议加ls -la composer.lock校验
缓存代理 + 本地 cache-dir + lock 文件三者缺一不可
单点优化效果有限。缓存代理解决跨地域网络延迟,本地 cache-dir 解决重复拉同一版本包,而 composer.lock 是让所有人装同一套东西的前提。最容易被忽略的是三者协同失效的边界情况:
- 代理缓存了
packages.json,但本地cache-dir权限不对 → Composer 仍反复请求元数据 -
cache-files-ttl设太短(如 1 小时),新人晚一天拉,缓存已过期 → 又得走代理重下 - 用了
--prefer-dist,但某 private 包只有source类型(如"type": "package"),它不走 dist 缓存 → 代理也缓存不了

















