如何配置作曲家软件的最低稳定性设置_minimum-stability?
- 内容介绍
- 文章标签
- 相关推荐
本文共计870个文字,预计阅读时间需要4分钟。
composer.json 文件顶层字段的值应修改为以下内容:
minimum-stability 必须写在 composer.json 顶层
它不是命令行参数,也不是插件配置,更不能塞进 config 或 extra 里。写错位置等于没写。
-
{"minimum-stability": "beta", "prefer-stable": true, "require": {...}}✅ 正确位置 -
{"config": {"minimum-stability": "beta"}}❌ Composer 完全忽略 -
{"extra": {"minimum-stability": "beta"}}❌ 同样无效
验证是否生效:运行 composer config minimum-stability,有输出才是真写对了位置。
RC 必须全大写,beta 能兼容 alpha,但 dev 不自动降级
minimum-stability 是“最低门槛”,不是“最高容忍”。它按稳定性从低到高排序:dev alpha beta RC stable,设成某个值,就允许该值及更稳定的版本。
-
"minimum-stability": "beta"→ 允许beta、RC、stable版本(自动包含更低的alpha,但不包含dev) -
"minimum-stability": "RC"→ 必须全大写,rc或Rc都会被当无效,退回到默认stable -
"minimum-stability": "dev"→ 允许所有dev-*分支,但不会让v2.0.0-beta1变成stable,它只是“放行下限”
常见错觉:设了 beta 却装不到 @beta 包?先用 composer show -a vendor/package 看真实发布的版本标签,别猜。
prefer-stable: true 不是可选,是必须配套
只设 minimum-stability: "beta",不加 prefer-stable: true,Composer 会优先选“最新”的满足约束的版本,而不是“最稳”的 —— 比如 v3.0.0-beta3 可能被选中,哪怕 v2.9.5(stable)也完全符合 ^2.0。
-
"minimum-stability": "beta"+"prefer-stable": true→ 在 beta 及以上里挑最稳的那个(比如 stable > RC > beta) - 没配
prefer-stable→ 同一语义版本下,可能随机选一个 commit,CI 构建不可重现 - 单独写
"prefer-stable": true没用,它必须和minimum-stability同时存在才起效
生产环境建议始终配这对组合,而不是靠运气。
单包加 @ 后缀比全局调低更安全
除非你在做全量 beta 测试,否则没必要把整个依赖树的稳定性水位拉低。多数情况,只需要某一个包用开发版。
- 装 Laravel 11 beta:
composer require laravel/framework:^11.0@beta - 临时试 GitHub 主干:
composer require phpunit/phpunit:dev-main@dev - 给私有包 alias 成稳定版:
"my/private-lib": "dev-feature as 1.0.0"
这样既绕过 minimum-stability 限制,又不影响其他包。改完记得 composer update my/private-lib,别只 install。
最容易被忽略的是锁文件:改完 composer.json 不跑 composer update --lock,composer.lock 还是旧策略,新设置形同虚设。CI 脚本里漏掉这步,问题会藏得特别深。
本文共计870个文字,预计阅读时间需要4分钟。
composer.json 文件顶层字段的值应修改为以下内容:
minimum-stability 必须写在 composer.json 顶层
它不是命令行参数,也不是插件配置,更不能塞进 config 或 extra 里。写错位置等于没写。
-
{"minimum-stability": "beta", "prefer-stable": true, "require": {...}}✅ 正确位置 -
{"config": {"minimum-stability": "beta"}}❌ Composer 完全忽略 -
{"extra": {"minimum-stability": "beta"}}❌ 同样无效
验证是否生效:运行 composer config minimum-stability,有输出才是真写对了位置。
RC 必须全大写,beta 能兼容 alpha,但 dev 不自动降级
minimum-stability 是“最低门槛”,不是“最高容忍”。它按稳定性从低到高排序:dev alpha beta RC stable,设成某个值,就允许该值及更稳定的版本。
-
"minimum-stability": "beta"→ 允许beta、RC、stable版本(自动包含更低的alpha,但不包含dev) -
"minimum-stability": "RC"→ 必须全大写,rc或Rc都会被当无效,退回到默认stable -
"minimum-stability": "dev"→ 允许所有dev-*分支,但不会让v2.0.0-beta1变成stable,它只是“放行下限”
常见错觉:设了 beta 却装不到 @beta 包?先用 composer show -a vendor/package 看真实发布的版本标签,别猜。
prefer-stable: true 不是可选,是必须配套
只设 minimum-stability: "beta",不加 prefer-stable: true,Composer 会优先选“最新”的满足约束的版本,而不是“最稳”的 —— 比如 v3.0.0-beta3 可能被选中,哪怕 v2.9.5(stable)也完全符合 ^2.0。
-
"minimum-stability": "beta"+"prefer-stable": true→ 在 beta 及以上里挑最稳的那个(比如 stable > RC > beta) - 没配
prefer-stable→ 同一语义版本下,可能随机选一个 commit,CI 构建不可重现 - 单独写
"prefer-stable": true没用,它必须和minimum-stability同时存在才起效
生产环境建议始终配这对组合,而不是靠运气。
单包加 @ 后缀比全局调低更安全
除非你在做全量 beta 测试,否则没必要把整个依赖树的稳定性水位拉低。多数情况,只需要某一个包用开发版。
- 装 Laravel 11 beta:
composer require laravel/framework:^11.0@beta - 临时试 GitHub 主干:
composer require phpunit/phpunit:dev-main@dev - 给私有包 alias 成稳定版:
"my/private-lib": "dev-feature as 1.0.0"
这样既绕过 minimum-stability 限制,又不影响其他包。改完记得 composer update my/private-lib,别只 install。
最容易被忽略的是锁文件:改完 composer.json 不跑 composer update --lock,composer.lock 还是旧策略,新设置形同虚设。CI 脚本里漏掉这步,问题会藏得特别深。

