答案是 roave/composer-bump-version:它提供 composer bump 命令,支持 patch/minor/major 及预发布版本升级,仅修改 composer.json 的 version 字段,需本地安装且不自动同步代码内硬编码版本。

Composer 本身没有内置的 bump 命令,你看到的 composer bump 来自第三方插件 hirak/prestissimo?不是。它实际来自 consolidation/cgr?也不是。真正提供该命令的是 composer/composer-version-bump 或更常用、更活跃的 roave/composer-bump-version ——但最主流、开箱即用且维护良好的,是 phpstan/extension-installer?不,是 johnpbloch/composer-version?错。答案是:consolidation/version 已弃用,当前事实标准是 roave/composer-bump-version,不过——等等,先别急着装。
为什么直接运行 composer bump 会报错 “Command 'bump' is not defined”
因为 Composer 默认只加载核心命令(install、update、require 等),bump 是插件命令,必须显式安装支持它的包:
-
roave/composer-bump-version是目前最稳定、语义化版本(SemVer)友好的选择,支持patch/minor/major和预发布标记 -
composer/composer-version-bump已归档(Archived),不再维护,不建议新项目使用 - 某些旧教程提到的
johnpbloch/composer-version实际不提供bump命令,仅读取版本号 - 全局安装插件(
composer global require)可能导致命令冲突或权限问题,推荐项目级本地安装
如何正确安装并使用 roave/composer-bump-version
在项目根目录执行以下命令(确保已安装 Composer 2.2+):
composer require --dev roave/composer-bump-version
安装后即可使用 composer bump。它会自动识别 composer.json 中的 version 字段,并按规则升级:
-
composer bump patch→1.2.3→1.2.4 -
composer bump minor→1.2.3→1.3.0 -
composer bump major→1.2.3→2.0.0 -
composer bump --pre=beta→1.2.3→1.2.4-beta.1(若原无 pre,则从.1开始;已有则递增) - 不加参数默认为
patch,即composer bump等价于composer bump patch
它修改什么?会不会漏掉其他需要更新的地方?
roave/composer-bump-version 只修改 composer.json 中的 version 字段,不会碰 package-lock.json、git tag 或代码中硬编码的版本字符串(如 MyClass::VERSION)。这是设计使然,也是最容易被忽略的坑:
- 如果你的项目在
src/Version.php中定义了常量const VERSION = '1.2.3';,这个值不会自动同步 - Git 标签需手动打:
git tag v$(jq -r '.version' composer.json)(需提前jq)或配合脚本 - 执行
composer bump后,务必运行composer update --lock更新 lock 文件(否则依赖解析可能仍基于旧 version) - 若
composer.json没有version字段,命令会失败并提示 “No version found”,此时需先手动添加(如"version": "1.0.0")
真正省时间的是自动化链条:把 composer bump 接入 CI/CD 流程或 Git hooks 时,才体现出价值;单独敲一条命令,不如直接改 JSON ——除非你频繁发布、严格遵循 SemVer、且团队已对齐流程。










