在 composer.json 中要求不稳定的开发版本需用 dev-分支名@dev 格式,如 "monolog/monolog": "dev-main@dev";须配合 minimum-stability 设置(如设为 dev 或保持 stable 并单独加 @dev)以避免安装失败,且 @dev 是稳定性标识符而非版本号。

在 composer.json 中要求一个不稳定的开发版本,核心是使用 @dev 作为版本约束后缀,告诉 Composer 允许安装开发分支(如 main、develop)或带有 dev- 前缀的不稳定参考(如 dev-main、dev-feat/login)。
直接指定开发分支名(推荐)
最常用且清晰的方式是用 dev-分支名,例如:
-
"monolog/monolog": "dev-main"→ 安装main分支最新提交 -
"myvendor/mylib": "dev-develop"→ 安装develop分支 -
"acme/utils": "dev-feature/auth"→ 安装名为feature/auth的远程分支
注意:Composer 会自动识别该写法为“开发版”,无需额外配置,但需确保 "minimum-stability" 不阻止 dev 版本(默认 stable 会拒绝,见下文)。
配合 minimum-stability 和 prefer-stable 控制行为
若项目 minimum-stability 是 stable(默认),直接写 "dev-main" 会报错 “could not be found”。此时有两种处理方式:
- 全局放宽:在
composer.json根级设"minimum-stability": "dev"(影响所有包,慎用) - 精准控制:保持
"minimum-stability": "stable",但为特定包显式加@dev后缀,如"monolog/monolog": "dev-main@dev" - 更稳妥做法:设
"prefer-stable": true+ 单独包用dev-xxx@dev,既优先稳定版,又允许个别包走开发版
@dev 后缀的本质与等价写法
@dev 不是独立版本号,而是“稳定性标识符(stability flag)”,用于覆盖默认稳定性策略。以下写法效果相同:
"vendor/pkg": "dev-main@dev"-
"vendor/pkg": "dev-main"(当minimum-stability允许时) -
"vendor/pkg": "dev-main#commit-hash@dev"(锁定某次提交)
而 "dev-main@stable" 是非法的——@stable 不能用于开发分支,Composer 会报错。
注意事项与常见问题
使用 @dev 时需留意:
- 开发分支无版本号语义,每次
composer update可能拉取不同提交,不适合生产环境 - 如果包未设置
"repositories",Composer 默认只查 Packagist;私有仓库或 GitHub 直链需额外声明 - GitHub 仓库可简写为
"vendor/pkg": "dev-main as 1.0.x-dev",用于版本别名(如让 autoloader 或依赖兼容识别) - 运行
composer show vendor/pkg可确认当前安装的是哪个分支及 commit hash
基本上就这些。不复杂但容易忽略 stability flag 和 minimum-stability 的配合关系。










