Composer 默认只安装 stable 版本,显式指定 @dev 等低稳定性版本需配合 --stability 参数或调整 minimum-stability,且 prefer-stable 会影响实际安装结果。

用 @stable 或 @dev 显式指定稳定性时,Composer 默认会拒绝安装低稳定性包
默认情况下,Composer 只装 stable 版本(即没有 -alpha、-beta、-dev 后缀的版本)。哪怕你写了 composer require vendor/package:@dev,它也可能报错:Your requirements could not be resolved to an installable set of packages.
这是因为 minimum-stability 配置像一道闸门——它不看你命令里写了啥,只看整个项目允许的最低稳定性门槛。
- 想装
@dev,必须在composer.json里把"minimum-stability"设为"dev",或临时加--stability=dev -
@beta对应"beta",@alpha对应"alpha",不能越级(比如minimum-stability: "beta"就装不了@dev) - 全局设
"minimum-stability": "dev"很危险:所有依赖都会倾向找 dev 分支,容易引入不兼容变更
require 命令加 --stability 参数比改 composer.json 更安全
临时装一个预发布版,别动项目根配置。直接用命令行参数覆盖:
composer require monolog/monolog:@dev --stability=dev
这个 --stability=dev 只影响本次安装,不会写进 composer.json,也不会影响其他包的解析逻辑。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--stability的值必须和你后缀匹配:想装@beta就得写--stability=beta - 如果同时指定多个包,比如
composer require a:@dev b:@beta --stability=dev,b会因稳定性不匹配而失败 - 不加
--stability时,@dev这类后缀会被忽略——Composer 当它不存在,还是按minimum-stability走
prefer-stable 开启后,@dev 也不一定装到最新 dev 分支
很多项目开了 "prefer-stable": true,这是个“保守模式”:即使 minimum-stability 是 dev,Composer 也会优先选 stable 版,除非你明确要求 @dev。
但注意:它只管“有没有 stable 可选”,不管“dev 分支是不是最新”。比如某包有 v2.0.0(stable)和 dev-main(最新提交),prefer-stable 会让 composer require vendor/pkg:@dev 装到 dev-main;但如果还有 v2.1.0-beta1,它可能就去装这个 beta,而不是 dev-main。
-
prefer-stable和minimum-stability是两个开关,要一起看 - 真要锁定到某个具体分支(如
dev-feature/x),得写全:composer require vendor/pkg:dev-feature/x - 用
composer show vendor/pkg查当前解析出的版本和来源,比猜靠谱
装完 @dev 包后,composer update 可能悄悄升级或降级
一旦你运行 composer update,Composer 会重新评估所有约束。如果远程 dev-main 有新提交,它大概率会拉新;但如果维护者删了那个分支,或者换了默认分支名,就可能报错或回退到别的版本。
-
composer.lock里存的是 commit hash,不是分支名——所以只要 hash 没变,install是确定的 - 但
update会查分支最新 commit,不是锁死的 - 生产环境严禁用
@dev,CI 流水线里也该加检查:composer show --installed | grep '@dev'
@dev 就万事大吉,忘了 --stability 或 minimum-stability 的限制。稳定性和分支名是两层控制,漏掉哪一层都可能卡住。

















