默认只装稳定版,因 Composer 默认 minimum-stability 为 stable,会跳过 dev-main 等开发版本;误装 dev 版常见于显式配置 dev 稳定性、require 中指定 @dev、运行 require dev-main 命令或 CI 中未设 prefer-stable。

默认就是只装稳定版,不需要额外设置。只要你没动过 minimum-stability,Composer 就会跳过 dev-main、dev-develop、1.2.x-dev 这类开发版本,只选 stable、RC、beta(需显式标注)等明确标记的发布态版本。
为什么有时还是装到了 dev 版?
常见原因不是 Composer “失控”,而是你或依赖包主动打开了门:
- 你在
composer.json里写了"minimum-stability": "dev"—— 这会让所有包都倾向拉dev-main,连laravel/framework都可能变成不可启动的快照版 - 某个依赖在
require中直接写了"vendor/package": "dev-main"或"^2.0@dev"—— 这是显式要开发版,Composer 只能照办 - 你运行了
composer require vendor/package:dev-main—— 命令本身就会把该包写成dev-main并改写composer.json - CI 脚本里执行了
composer update --prefer-lowest或--with-all-dependencies,却没配"prefer-stable": true,导致解析时退选了不稳定版本
如何真正守住“只装稳定版”这条线?
靠组合策略,不是单点开关:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 删掉或注释掉
composer.json中的"minimum-stability"字段(默认就是stable) - 在根级加
"prefer-stable": true,这样即使某包同时有2.9.2和3.0.x-dev,Composer 也会选前者 - 检查所有
require条目,确保没有@dev、dev-前缀或as别名指向开发分支 - CI 流程中固定用
composer install(不是update),并确保composer.lock已提交且未被修改
遇到 dev 版误入,怎么快速清理?
别急着删 vendor,先定位来源:
- 运行
composer show vendor/package看当前装的是什么版本,带+git或dev-就是开发版 - 查是谁引入的:
composer why vendor/package,输出里带dev-的那行就是源头 - 如果源头是另一个包(比如
foo/bar依赖了vendor/package:dev-main),就得去约束那个包,或换它的一个稳定版 tag - 临时救急:运行
composer require vendor/package:^2.0 --prefer-stable,强制它回退到最新稳定版并更新composer.lock
最易被忽略的一点:锁文件不是“保险柜”,而是“安装说明书”。你改了 composer.json 却不跑 composer update,composer.lock 里照样存着旧的 dev 版——部署时 install 仍会照装。是否真稳定,得看 lock 文件里 version 字段是不是纯数字(如 "2.85.0"),而不是 "dev-main#abc123"。

















