composer.json 中通过 minimum-stability 和 prefer-stable 共同控制包稳定性:minimum-stability 设定最低允许稳定性(默认 stable),prefer-stable 为 true 时优先选 stable 版本(即使 minimum-stability 为 dev);二者需配合使用,单独修改易失效。

composer.json 里怎么控制 minimum-stability 和 prefer-stable
项目默认只装 stable 版本,但你可能需要临时用 dev-master 或某个 dev-feature-branch。核心靠两个配置项:minimum-stability 决定“最低允许什么稳定性”,prefer-stable 决定“同版本下是否优先选 stable”。它们必须一起看,单独改一个容易失效。
-
minimum-stability默认是stable,设成dev后,composer require vendor/package:dev-main才能成功安装 -
prefer-stable是布尔值,默认false;设为true后,即使minimum-stability是dev,Composer 仍会优先选v1.2.0而不是dev-main(只要两者都满足约束) - 这两个值只影响
require解析时的版本选择逻辑,不影响已锁在composer.lock中的版本
给单个包强制指定开发版(绕过全局 stability 限制)
不想改整个项目的 minimum-stability?直接在 require 里写明分支或提交哈希即可。Composer 会自动放宽对该包的稳定性要求,其他包不受影响。
- 装某分支:
"vendor/package": "dev-main"或"vendor/package": "dev-develop" - 装某次提交:
"vendor/package": "dev-main#abc1234"(#后是 commit hash 前 7 位) - 装某 tag 的 dev 版(如预发布):
"vendor/package": "dev-v2.0.0-rc1" - 注意:这种写法在
composer update时仍受minimum-stability约束——除非该包明确写了dev-前缀
运行时临时切换 stability(不改配置文件)
有时候只是想试一下 dev 版本,又不想动 composer.json。可以用命令行参数覆盖:
composer require vendor/package:dev-main --stability=dev
这个 --stability=dev 会临时把 minimum-stability 设为 dev,仅对本次命令生效。等价于:
COMPOSER_MINIMUM_STABILITY=dev composer require vendor/package:dev-main
-
--stability只影响本次命令的包解析,不写入composer.json - 如果同时用了
--prefer-stable参数,它会覆盖配置里的prefer-stable值 - 执行完后记得检查
composer.lock,确认装的是预期的 commit,而不是意外 fallback 到某个 stable tag
常见错误:明明写了 dev-main 却装了 stable 版
最常踩的坑是没意识到 require 的版本约束和 stability 是两层过滤。比如你写:
"vendor/package": "^1.0"
即使 minimum-stability 是 dev,Composer 也不会装 dev-main——因为 ^1.0 不匹配 dev-main(后者没有明确版本号)。必须显式写 dev-main 或用 @dev 后缀:
"vendor/package": "dev-main as 1.0.x-dev"
- 分支名必须带
dev-前缀,否则 Composer 当作普通字符串忽略 -
@dev是旧写法,现在推荐直接用dev-xxx - 如果包的
composer.json里没声明branch-alias,dev-main可能无法被^1.0匹配到
真正起作用的是分支别名和版本约束的交集,不是光靠改一个配置就能让所有 dev 版自动进来。










