composer 2.0+ 已完全移除 branch-alias 支持,extra.branch-alias 配置静默失效;应改用 version 字段声明如 "2.0.x-dev" 或打 v2.0.0-beta.1 等 git tag 来满足 "^2.0" 约束。

Composer 2.0+ 已完全移除 branch-alias 支持,任何写在 extra.branch-alias 里的配置都不再被解析,也不起作用。 如果你还在用它解决版本依赖问题,大概率会失败,且错误提示不明确。
为什么 branch-alias 不生效了
Composer 1.x 时期靠它把 dev-main 映射成 1.0.x-dev,让下游项目能用 "^1.0" 拉分支。但这个机制和语义化版本(SemVer)冲突、依赖方无法感知、Packagist 同步不可靠,所以 Composer 2.x 直接砍掉了整段解析逻辑。
常见现象包括:
-
composer show vendor/package仍只显示dev-main,从不显示你配的1.0.x-dev - 下游项目写
"vendor/package": "^1.0"完全匹配不到,报Could not find a version - 即使 push 了新
composer.json到远程,Packagist 页面也看不到别名变化
替代方案:用 version 字段 + --stability=dev
真正可控、兼容 Composer 2.x 的做法,是放弃“自动映射”,改用显式声明:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 在你要发布的包的
composer.json中,直接设"version": "2.0.x-dev"(不是放在extra里) - 确保 Git 分支名就是
main(或develop),不要加dev-前缀——Composer 会自动识别该分支为2.0.x-dev版本 - 下游项目执行
composer require vendor/package:2.0.x-dev --stability=dev即可安装 - 若想全局允许 dev 版本,可在项目根目录
composer.json的config段加"minimum-stability": "dev",但生产环境慎用
注意:version 字段必须带 -dev 后缀,否则会被当作稳定版处理,触发 conflict 或 require 失败。
如果必须支持 "^2.0" 这类约束
只能靠 Git tag 配合稳定性策略,而不是 branch-alias:
- 在
main分支上打一个轻量 tag:git tag v2.0.0-beta.1,然后 push:git push origin v2.0.0-beta.1 - Composer 会把
v2.0.0-beta.1解析为2.0.0-beta.1,满足"^2.0"约束 - 后续持续打
v2.0.0-beta.2、v2.0.0-rc.1等,就能自然升级 - 避免用
dev-main长期锁 commit hash ——force push后composer.lock里的 hash 就失效,CI 构建直接崩
最易被忽略的一点:branch-alias 的历史残留配置(比如旧文档、脚手架模板里的 extra.branch-alias)不会报错,只是静默失效。检查是否还在用它,比花时间调试更省事。










