@beta 表示允许安装 beta 及更不稳定版本(alpha、rc),如“monolog/monolog”: “^3.0@beta”;若要锁定特定 beta 版本,需写全如“3.0.0-beta2@beta”;漏掉 @beta 或混用如 @dev 会导致解析失败;dev-main 等开发分支必须显式加 @dev 才能安装;子依赖的 minimum-stability: dev 会绕过 prefer-stable;composer install 不更新 beta 版时需删 lock 后执行 update。

直接写 @beta 就能装 beta 及更不稳定的版本
Composer 默认只接受 stable 版本,想让某个包走 beta 流程,最轻量的方式就是在 require 字段里给它加 @beta 后缀。比如:"monolog/monolog": "^3.0@beta"。这表示:只要满足 ^3.0 范围、且稳定性 ≥ beta(即 alpha、beta、RC 都算),就可被选中。
注意:@beta 不是“只装 beta”,而是“beta 及更不稳定的都行”。所以 3.0.0-alpha1 也会被接受——如果你只想锁死 3.0.0-beta2,就得写全:"monolog/monolog": "3.0.0-beta2@beta"。
常见错误:
- 漏掉
@beta,只写"monolog/monolog": "3.0.0-beta2"→ Composer 会按默认minimum-stability: stable过滤,直接跳过该版本 - 混用标记,比如
"monolog/monolog": "3.0.0-beta2@dev"→@dev和@beta冲突,解析失败 - 以为
@beta会影响其他包 → 不会,它只作用于当前条目,minimum-stability对这个包完全失效
dev-main@dev 必须带 @dev,否则一定失败
很多人执行 composer require vendor/pkg:dev-main 报 No matching package found,根本原因不是包不存在,而是 Composer 在解析前就用 minimum-stability 把 dev-main 这类开发分支从候选池里踢掉了。
正确写法只有一种:composer require vendor/pkg:dev-main@dev。这里的 @dev 是强制放行指令,不是可选修饰;漏掉就等于没授权。
额外提醒:
- 分支名(如
dev-main)只是定位依据,真正起效的是末尾的@dev - 私有包或未索引仓库即使加了
@dev也可能失败,需确认repositories已正确定义 -
dev-main#abc123这种 commit-hash 形式也必须带@dev,例如:"vendor/pkg": "dev-main#abc123@dev"
子依赖偷偷拉 dev 版,prefer-stable 拦不住
你明明只给自己的 require 加了 @beta,结果 composer install 后发现 composer.lock 里冒出一堆 dev- 提交哈希——大概率是某个子依赖(比如 vendor/pkg 的依赖)在它自己的 composer.json 里写了 "minimum-stability": "dev",这个设置会覆盖你项目的全局配置。
prefer-stable: true 完全无效:它只影响“多个同级候选时选谁”,不阻止“把 dev 版放进候选池”。
排查方法:
- 运行
composer show -t vendor/pkg查看依赖树,重点扫一眼子依赖的composer.json内容 - 临时解法:更新时加
--with-all-dependencies,缩小污染范围,例如:composer update vendor/pkg --with-all-dependencies - 长期建议:CI 中加检查,扫描
composer.lock是否出现意外的dev-哈希
composer install 忽略 beta?先清 lock 再 update
即使 composer.json 写了 "pkg": "2.5.0-beta1",composer install 仍可能回退到 stable 版——因为 composer.lock 已锁定旧版本,且当前 minimum-stability 没覆盖该 beta 标签。
解决步骤必须按顺序来:
- 删掉
composer.lock中对应包的整段条目(或整个文件) - 确认
composer.json中该包的字符串完全准确(大小写、分隔符、@beta缺一不可) - 运行
composer update vendor/pkg --with-all-dependencies,而不是install - 检查输出是否含
Resolving dependencies through SAT,并确认最终安装版本号是你预期的 beta
如果还不行,用 composer show vendor/pkg --all 看真实发布的版本列表,确认 2.5.0-beta1 确实存在、状态为 beta(不是 dev),且 PHP 版本兼容。











