Composer 默认只安装 stable 版本,minimum-stability 是项目级稳定性阈值,取值从 stable 到 dev 限制依次放宽;它定义可接受的版本后缀,不直接控制包安装,需配合 require 中显式版本或 prefer-stable 使用。

Composer 默认只安装稳定版本(stable),如果你的项目依赖了 dev- 分支、alpha、beta 或 rc 版本的包,会直接报错或跳过安装——这不是 bug,是稳定性策略在起作用。
什么是 minimum-stability?
它是 Composer 的全局稳定性阈值,决定了哪些版本号后缀的包可以被接受。它不控制「是否安装某个具体包」,而是定义「哪些稳定性标识符算合格」。可选值有:stable、RC、beta、alpha、dev,越往下限制越宽松。
注意:minimum-stability 是项目级配置,写在 composer.json 根对象里,不是命令行参数。
如何在 composer.json 中设置最小稳定性
直接添加字段即可,例如允许安装 beta 及以上版本:
{
"minimum-stability": "beta",
"prefer-stable": true,
"require": {
"monolog/monolog": "^2.0"
}
}
关键点:
-
minimum-stability本身不改变已声明依赖的版本约束,它只是“准入门槛”; - 如果某包只发布了
dev-main,而你的minimum-stability是stable,即使你写了"package/name": "dev-main",也会报Your requirements could not be resolved; - 设为
dev并不意味着自动拉取最新dev-main,仍需显式指定版本如"dev-main as 1.0.x-dev"; - 搭配
"prefer-stable": true更安全:当存在稳定版和非稳定版都满足约束时,优先选稳定版。
require 中的版本约束如何覆盖 minimum-stability
单个包可以突破全局限制,只需在 require 中用带稳定性后缀的版本写法,比如:
{
"minimum-stability": "stable",
"require": {
"phpunit/phpunit": "9.6.x-dev",
"laravel/framework": "^10.0"
}
}
此时 phpunit/phpunit 会被允许安装 dev 版本,而其他包仍受 stable 约束。Composer 会按如下顺序判断一个包是否合法:
- 该包在
require中是否用了明确含稳定性后缀的版本(如dev-main、1.2.3-beta1)→ 是则放行; - 否则看其实际发布的版本是否 ≥
minimum-stability定义的级别; - 若都不满足,就拒绝解析依赖树。
常见错误与调试技巧
遇到 Could not find package xxx at version yyy 或 your requirements could not be resolved,先检查:
- 运行
composer show vendor/package --all看目标包实际发布了哪些版本及对应稳定性标签; - 确认
composer.json中minimum-stability值拼写正确(大小写敏感,RC不是rc); - 别混淆
minimum-stability和stability-flags:后者已废弃,且仅用于 legacy 场景; - CI 环境中若依赖
dev包,记得提交composer.lock,否则不同机器可能解析出不同 commit。
稳定性不是越低越好,dev 模式下容易因上游变更导致构建失败,真正需要时再降级,而不是默认设成 dev 图省事。










