必须加 --stability=beta 参数才能安装 beta 版,因 Composer 默认仅识别 stable 版本,遇到 -beta1 后缀直接跳过查询;^2.5@beta 会匹配最新可用 beta 版,而 2.5.0-beta1 严格精确匹配指定 tag。

composer require 装 beta 版必须加 --stability=beta
不加这个参数,composer require vendor/package:2.5.0-beta1 会报 No matching package found——不是包名错了,也不是网络问题,是 Composer 默认只认 stable 版本。它看到 -beta1 后缀就直接跳过,连 Packagist 都不去查。
临时生效的写法只有这一种:
composer require vendor/package:2.5.0-beta1 --stability=beta- 如果版本含破折号(如
9.0.0-RC1),建议加引号:composer require "laravel/framework:9.0.0-RC1" --stability=RC - 别用
@beta或=2.5.0-beta1:前者被当作分支别名解析失败,后者在旧版 Composer 中可能被忽略
为什么 composer.json 里写了 "package": "2.5.0-beta1" 还是装不上?
因为 composer install 完全依赖 composer.lock 文件。即使你改了 composer.json,只要 lock 文件里还锁着旧 stable 版,它就照装不误。
解决方法分两步:
- 删掉
composer.lock中对应包的整段条目(或直接删整个文件) - 运行
composer update vendor/package --with-all-dependencies,强制重新解析并锁定 beta 版 - 检查
composer.lock里该包的version字段是否为"2.5.0-beta1",且source.type是"dist"(不是"source")
^2.5@beta 和 2.5.0-beta1 的实际区别
前者是“找 2.5.x 中最新可用的 beta”,后者是“死守这个 tag”。它们行为完全不同:
-
^2.5@beta可能装上2.5.0-beta2,甚至2.5.1-beta1(如果存在) -
2.5.0-beta1严格匹配 Git tag 或包内composer.json声明的version字段,错一位(比如写成2.5.0-beta)就失败 -
dev-main#abc123这类 commit 引用不走稳定性判断,但属于开发态,不适合测试预发布逻辑
回退到 stable 版时最容易漏掉的一步
把 composer.json 里的版本改成 ^2.5 或 2.5.* 后,只跑 composer update 不够。Composer 可能仍从 lock 文件里读出旧的 beta 解析结果,导致降级不生效。
必须确认三件事:
- 执行
composer update vendor/package(不带--with-all-dependencies) - 看终端输出里有没有
Downgrading vendor/package (2.5.0-beta1 => 2.5.3)这类明确降级日志 - 打开
composer.lock,确认version字段已更新,且time字段是新时间戳
beta 版测试的核心不是“装得上”,而是“锁得住、退得清”——lock 文件和 source.type 才是真实落地的依据,不是命令行回显。


















