Composer 2.11 加了个 cooldown:新版本先别急着装,dist 也不再回退到 source
Composer 2.11.0-RC1 于 2026-10-22 发布。composer self-update --preview 可以装到 RC1,composer self-update --stable 会回到 2.10。
cooldown:把刚发布的版本挡在窗口外
2.11 增加 cooldown 策略,可配置一段时间内不取用刚发布的新版本,降低依赖树被投毒 release 打中的概率(#12692、#13098-#13102、#13153)。自定义 policy 增加 block-scope 选项,让 policy 在 install 阶段也能生效并拦截(#12990)。
需要注意,设置 policy 后 lock 文件会被标记过期,触发 lock file change warning;需要在同一个变更里重新生成并提交 lock,避免 CI 反复报过期。
dist 不再回退到 source
这是一个 BC break:2.10 作为临时措施加入的 source-fallback 配置被移除,dist 安装不再回退到 source(#13050)。如果 CI 或发布流程依赖“dist 失败就自动走 source”的兜底,要显式处理 source 安装路径,否则以前能自动恢复的场景会变成硬失败。
安全修复
- TLS 拒绝展示不受信任中间证书的连接,涉及被入侵的 eMudhra 中间证书;即使系统 CA 存储信任其根证书,也会拒绝(#13146)。
- bin proxy 中由包控制的 bin path 和 shebang 此前未转义;包含 shell 元字符的 bin path 现在会被拒绝(#13056)。
secure-http补上此前漏掉的 URL:非严格合法的 URL,以及 git 的::语法(#13144)。- repository 的自定义 HTTP header 不再发往名称以 repository 主机名开头的其他主机(#13142)。
其它变更
composer-plugin-api升至 2.11.0。audit增加--direct(-D);新增strict-psr-autoloader配置;VCS 仓库支持only-branches。- 支持 429 /
Retry-After:等待后重试。 - 不再请求 HTTP/3:近期 curl 版本下每个新连接都会增加延迟,改回性能。
- User-Agent 加入 AI coding agent 标识;
outdated/show --latest并行加载元数据。 - 终端进度/状态可通过 OSC 7501、OSC 9 报告(
COMPOSER_TERMINAL_STATUS)。 - 修复:截断的 zip 下载在解压失败后重试且不缓存;生成文件被原地重写(硬链接副本/并发读取);SSH URL 在 git 命令中丢失用户(2.10.3 以来的认证失败);
composer.lock的 content-hash 有合并冲突时 install 直接失败(#13105)。
升级操作与取舍
先在 CI 副本上验证,不要直接切生产:
composer self-update --preview
composer install
composer audit --direct
确认无误再推广;回滚用:
composer self-update --stable
cooldown 窗口是安全与时效的取舍。窗口越长,刚发布的投毒版本或坏 release 越难进入依赖树,但安全修复、紧急 bugfix 也会被一起挡在窗口外。按依赖来源、发布频率和修复响应速度来定,不要一味拉长;对需要立即跟进的包,评估是否单独放宽策略。
dist 不再回退 source 后,构建环境要保证 dist 可下载,或提前准备 source 安装路径。policy 改动会弄脏 lock 文件,记得重新生成并提交。
Release: Composer 2.11.0-RC1