composer update --refresh 是官方唯一支持的强制刷新元数据并更新的命令,要求 Composer ≥ 2.5,仅刷新索引文件、不重下包,比 clear-cache + update 更可靠,且不受缓存策略干扰。

composer update --refresh 是唯一有效方式
Composer 没有“执行 update 前自动刷新缓存”的内置机制,composer update --refresh 就是官方唯一支持的、能强制丢弃旧元数据并重新拉取的命令——它不是“预刷新”,而是把刷新和更新合并在一次执行中。低于 Composer 2.5 的版本不支持该参数,会报错 Unrecognized option: --refresh。
- 必须确保 Composer ≥ 2.5:运行
composer --version确认;如过旧,先composer self-update - 该命令只刷新元数据(
packages.json、provider-*.json),不重下 ZIP 包,所以快且安全 - 它不会读取本地
composer.lock的旧约束来“推测”该拉什么,而是先全量重载镜像源索引,再做依赖解析 - 如果你只是想“避免用缓存”,但又不想等完整 refresh,可用
composer update --no-cache,但它跳过所有缓存(包括已下载包),速度慢、流量大
为什么 --refresh 比 clear-cache + update 更可靠
很多人习惯先 composer clear-cache 再 composer update,但这存在两个关键断层:
-
clear-cache只删磁盘文件,但 Composer 在内存或进程内可能仍持有旧元数据引用(尤其在某些 CI 环境或 PHP-FPM 复用场景) - 即使缓存目录为空,
composer update默认仍会尝试从本地已有vendor/composer/installed.json或 lock 文件“启发式推导”,不一定触发完整远程索引拉取 -
--refresh强制绕过所有这些路径:它明确告诉 Composer “别猜,去镜像源拿最新packages.json”,连--no-cache都做不到这点 - 加
-v可验证是否真刷新:composer update --refresh -v日志里一定会出现Downloading https://mirrors.aliyun.com/composer/packages.json这一行
执行前必须检查镜像源配置
--refresh 从哪拉数据,完全取决于当前生效的镜像源地址。配错就会刷新一堆无用数据,甚至触发限流。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局镜像:运行
composer config -g repo.packagist,确认输出是你期望的地址(如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}) - 项目级镜像:若
composer.json里定义了repositories,则composer config repo.packagist(不带-g)才有效,且修改会写入该文件 - 用
--no-cache -v组合可看真实请求 URL,比如composer update --refresh --no-cache -v能暴露是否误走回packagist.org - 阿里云、腾讯云等镜像站响应头带
Cache-Control: max-age=3600,这会影响后续普通 update 行为,但不影响--refresh—— 它本就是强制重拉
高频更新场景下的替代方案
如果你在 CI/CD 或私有包发布流程中需要“每次 update 都强刷”,靠手动敲 --refresh 不现实。这时应转向脚本化控制:
- 在
composer.json的scripts中定义预处理命令:"pre-update-cmd": "composer clear-cache"—— 但注意:它不能替代--refresh,只是辅助清理 - CI 脚本中统一用
composer update --refresh --no-interaction,避免交互阻塞 - 私有镜像用户可配合 webhook:上游 Git Tag 推送后自动触发镜像同步,再让客户端用
--refresh获取最新结果,形成闭环 - 别依赖
cache-ttl参数试图“自动刷新”:它只影响普通 update 是否发请求,且常被镜像站响应头覆盖,对--refresh无意义
真正要确保 update 前元数据最新,就一条路:composer update --refresh。其他所有“清缓存”“调 TTL”“换镜像”操作,都是围绕它服务的辅助手段——漏掉这一步,后面所有优化都建立在过期索引上。

















