composer update --refresh 仅在 Composer ≥ 2.5 有效,强制重拉 packages.json 和 provider-*.json(不重下 ZIP 包),但需确保镜像 URL 正确配置且未被项目级 repositories 覆盖,否则仍可能 fallback 到 packagist.org。

Composer 镜像源配置不是“设完就跑”,高频更新场景下,真正卡住你的从来不是网络,而是缓存策略、配置覆盖和 fallback 逻辑的叠加效应。
composer update --refresh 真正起作用的条件
这个参数只在 Composer ≥ 2.5 版本中有效,它强制重拉 packages.json 和所有 provider-*.json,但不重新下载 ZIP 包。关键点在于:它只对当前镜像地址生效,且前提是镜像 URL 已正确配置并被实际使用。
- 执行前必须确认
composer config -g repo.packagist或项目级composer config repo.packagist输出的是完整 JSON,形如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 如果项目
composer.json中有"repositories"数组且未设"packagist.org": false,--refresh仍可能被绕过,去请求第一个源(哪怕它是 packagist.org) - 执行后日志里应出现
Downloading https://mirrors.aliyun.com/composer/packages.json和多个provider-请求,而不是静默跳过 - 若镜像站本身尚未同步(比如新包发布后 2 分钟内),
--refresh拉到的仍是旧数据——这不是你配错了,是服务端延迟
多镜像 fallback 不是负载均衡,而是顺序兜底
Composer 从不并发查源,也不测速或轮询。所谓“多镜像高可用”,本质是数组顺序 + HTTP 状态码判断:只用第一个返回 200 的源;只有第一个返回 404 才查第二个;超时(默认 30 秒)、502、SSL 错误都会卡死,不会自动切下一个。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须手写进项目
composer.json的"repositories"数组,composer config -g写多个会覆盖,无效 - 每个对象必须含
"type": "composer"且"url"以/结尾,例如"https://mirrors.tuna.tsinghua.edu.cn/composer/" -
"packagist.org": false必须写在composer.json根节点,不能嵌套进repositories里,否则官方源仍会悄悄参与解析 - 阿里云响应快但偶发同步延迟,清华源稳定性高但偶尔 404,腾讯云适合华南节点——选哪个作首位,得看你的 CI 服务器地理位置,不是看官网宣传语
CI/CD 中频繁更新失败,大概率是缓存没清对地方
composer clear-cache 只删 ~/.composer/cache/files/ 和默认源(https---packagist.org/)下的元数据,但你配的是阿里云镜像,缓存实际存在 https---mirrors.aliyun.com-composer/ 这类路径里。不清这里,Composer 就一直读 15 分钟前的旧索引。
- 先运行
composer config -g repo.packagist确认当前镜像 URL - 把 URL 转义:去掉
:、/、.,全换成-,例如https://mirrors.aliyun.com/composer/→https---mirrors.aliyun.com-composer - 手动删目录:
rm -rf $(composer config --global cache-dir)/repo/https---mirrors.aliyun.com-composer - CI 脚本里别滥用
--refresh:它会增加网络请求失败概率;更稳的做法是--no-cache -v+ 显式指定镜像 URL
项目级配置为何比全局配置更可靠
全局配置(composer config -g)写入 ~/.composer/config.json,只对当前 shell 用户生效。而 CI 环境(如 GitHub Actions、GitLab Runner)通常以 runner 或 www 用户运行,压根读不到你本地的配置。
- 项目级配置写进
composer.json,能被 Git 跟踪、被所有环境一致加载 - 命令
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不带-g)会修改项目composer.json的"repositories"字段,但注意:它会全量替换该字段,不是追加 - 若项目已有私有源,建议手动编辑
composer.json,在"repositories"数组首位插入镜像对象,并确保"packagist.org": false在根节点 - 换源后必须删掉
vendor/和composer.lock,再跑composer install,否则哈希校验失败或 autoload 引用失效
高频更新场景下,最易被忽略的是:镜像只加速下载,不解决 Resolving dependencies 卡顿;那个阶段完全在本地 CPU 上跑求解器,和源地址无关。如果每次 update 都卡几十秒,先检查 composer.json 里的版本约束是否过宽、是否启用了 "minimum-stability": "dev",而不是反复折腾镜像配置。

















