minimum-stability 是 Composer 在无更匹配版本时允许采纳的最低稳定性标签,合法值按宽松到严格为 dev、alpha、beta、RC、stable,默认 stable;RC 必须全大写,否则退回到 stable。

什么是 minimum-stability?
它不是“要求包必须多稳定”,而是 Composer 在找不到更匹配版本时,允许降级采纳的最低稳定性标签。比如设为 stable,那 dev-master、beta、rc 都不会被选中——哪怕它们是唯一满足版本约束的候选。
minimum-stability 的合法值及实际效果
取值影响所有未显式标注稳定性的依赖(即没写 @dev、@beta 这类后缀的包)。常见值按宽松到严格排列:
-
dev:接受dev-*分支、dev-main、dev-develop等 —— 适合本地开发或内部私有包 -
alpha:跳过dev-分支,但接受*-alpha标签 -
beta:接受beta和alpha(Composer 自动向下兼容) -
RC(注意大写):接受RC、beta、alpha -
stable(默认值):只认stable标签,即无后缀或带-stable的正式发布版
⚠️ 注意:RC 必须全大写;写成 rc 或 Rc 会被忽略,退回到默认 stable 行为。
如何覆盖全局设置?优先级顺序很重要
项目级配置永远优先于全局 composer.json。但要注意:单个包可强行突破限制,靠的是版本约束里的稳定性后缀。
- 在
require中写"monolog/monolog": "2.0.x-dev"→ 即使minimum-stability是stable,也会拉dev分支 - 写
"symfony/console": "^6.4@beta"→ 明确指定用 beta 版,绕过minimum-stability - 若同时存在
"minimum-stability": "dev"和"prefer-stable": true,Composer 会优先选 stable 版(只要存在),仅在无 stable 可选时才回落到 dev
prefer-stable 不改变规则,只影响“选择策略”——它本身不降低稳定性门槛。
常见报错与修复方式
典型错误信息:Could not find package xxx with stability dev 或 no matching package found,往往是因为:
-
minimum-stability设太高(如stable),但所需包只有dev-main或2.1.x-dev - 拼写错误:把
"minimum-stability": "RC"写成"minimum-stability": "rc",导致实际生效的是默认stable - 依赖链中某包的
composer.json声明了"minimum-stability": "dev",而你的项目没配prefer-stable,结果整个锁文件里混入大量 dev 包
修复建议优先级:
- 先确认是否真需要不稳定版本——多数生产环境应坚持
stable+ 显式@beta指定 - 临时调试可用
composer require vendor/pkg:dev-main --stability-dev,比改全局配置更安全 - CI 环境中务必锁定
minimum-stability并禁用prefer-stable的随意性,否则不同机器可能装出不同版本
{
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"php": "^8.1",
"laravel/framework": "^10.0"
},
"require-dev": {
"phpunit/phpunit": "^10.0@beta"
}
}
真正容易被忽略的点:稳定性设置不仅影响 composer install,还决定 composer update 是否会升级到新 beta 版——哪怕你上次装的是 stable,update 时也可能因新版本只有 RC 而失败,除非你调低 minimum-stability 或加 @rc 后缀。










