minimum-stability 是硬性过滤闸,决定哪些版本能进入安装候选池,低于该级别的版本直接被忽略;必须置于 composer.json 根对象顶层,修改后需运行 composer update --lock 生效,且 RC 必须全大写、dev 最宽松但风险最高。

minimum-stability 是硬性过滤闸,不是版本偏好开关
它决定哪些版本能进入安装候选池,低于该级别的版本直接被忽略,连比较机会都没有。比如设为 "minimum-stability": "beta",所有 dev-main、v2.1.0-alpha3 就不会出现在解析结果里——不是“不优先选”,是压根不看。
这个配置必须放在 composer.json 的根对象层级(和 require 同级),写在 config 或 extra 里完全无效。改完后必须运行 composer update --lock 或 composer update vendor/package,否则 composer.lock 仍锁着旧规则下的版本。
-
stable(默认):只接受无后缀或带-stable的正式版,如3.2.0、3.2.0-stable -
RC:必须全大写,小写rc或Rc会被无视,退回到stable行为 -
dev:最宽松,匹配dev-main、dev-develop、v4.0.0-dev等 - 值越低越宽松,但风险越高;生产环境应始终为
stable
require 里加 @ 后缀才是精准授权,不是可有可无的修饰
仅改 minimum-stability 是全局放宽,容易误伤其他依赖;更安全的做法是在 require 中为单个包显式标注稳定性标记,它会覆盖项目级设置。
例如要装 monolog/monolog 的开发分支,写 "monolog/monolog": "dev-main" 或 "monolog/monolog": "^3.0@dev" 即可,哪怕 minimum-stability 是 stable 也照装不误。
-
@dev:强制走分支快照,不依赖 tag,适合调试私有包 -
@beta:自动兼容alpha和beta,但不包括RC或dev -
@RC:必须大写,否则失效;它包含beta、alpha,但不含dev -
@stable是冗余写法,等价于不写任何标记 - 报错
Could not find a version of package matching your minimum-stability,大概率是没在require中加对应后缀,或后缀拼错(比如写了@rc1)
prefer-stable 只影响“选哪个”,不改变“能不能装”
它只在多个候选版本都满足 minimum-stability 门槛时起作用。比如设了 "minimum-stability": "beta" 且某包同时有 2.5.0(stable)和 2.6.0-beta2(beta),"prefer-stable": true 就会让 Composer 选前者。
但它拦不住你显式 require 的 @dev 或 @beta 版本。单独设 prefer-stable 而不调 minimum-stability,基本没实际效果。
- 想彻底锁死只用稳定版?必须同时设
"minimum-stability": "stable"+"prefer-stable": true - 设了
"minimum-stability": "dev"后,prefer-stable仍有效:它会让 Composer 在dev-main和2.5.3都可用时,优先选2.5.3 - 上线前务必检查
composer.lock:确认目标包的version字段是类似"2.5.3",而不是"dev-develop"或带"reference": "a1b2c3d"的 hash
子依赖自己声明 minimum-stability 会覆盖你的设置
某些包(尤其是内部 SDK 或早期发布的库)会在自己的 composer.json 里写 "minimum-stability": "dev"。一旦你 require 它,它的设置就会向上渗透,导致你项目即使设了 stable,仍可能拉到 dev 版本的子依赖。
这种情况无法通过父项目配置拦截,只能靠 composer show -a vendor/package 查清真实可用版本,再结合 stability-flags 逐个压制:
- 在根
composer.json中加:"stability-flags": {"vendor/subpkg": "stable"} - 该配置优先级高于子依赖的
minimum-stability,但只对指定包生效 - 不推荐长期依赖
dev子包;若必须用,应在 CI 流程中加入校验:扫描composer.lock是否含dev-或reference字段











