composer默认屏蔽dev-main等不稳定版本,因minimum-stability默认为stable,必须显式加@dev后缀或--stability=dev参数才能安装,且锁死到具体commit而非分支。

直接装 dev-main 或 @beta 失败,不是命令写错,而是 Composer 默认屏蔽所有不稳定版本——必须显式告诉它“这次允许”。
为什么 composer require vendor/name:dev-main 报错
错误提示通常是 Could not find package 或 Your requirements could not be resolved,根本原因不是网络或权限问题,是 Composer 的 minimum-stability 默认为 stable,连尝试拉取 dev-main、alpha、beta 都跳过。
- 先运行
composer show vendor/name --all,确认目标分支(如dev-main)或标签(如v2.0.0-beta1)真实存在 - 私有 Git 仓库未被 Packagist 索引时,
composer require根本查不到分支名,必须在composer.json的repositories中手动加"type": "vcs" -
dev-main@dev是合法组合,但^2.0@dev无效;@beta只对打了语义化 beta tag 的包生效(如v1.2.0-beta.1),不是所有包都支持
composer require 加什么参数才真正生效
最安全的做法是不改全局配置,用命令行参数临时放开限制:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 装
dev分支:composer require vendor/name:dev-main --stability=dev - 装
beta版本:composer require vendor/name:^2.0@beta --stability=beta - 参数支持简写:
--stability-dev等价于--stability=dev,但后者更通用 - 如果已有旧版本,
require默认只更新composer.lock,可能不重下代码——加--update-with-dependencies强制刷新依赖树
装完后 composer.lock 锁的是 commit hash,不是分支名
执行后立刻检查 composer show vendor/name,看 versions 行是否显示你指定的 dev-main 或 2.0.0-beta1。更重要的是:
-
composer.lock里该包的source字段会是"type": "git",且"reference"是固定 commit hash(比如"a1b2c3d"),不是main这个字符串 - 这意味着下次
composer install会严格复现这个 commit,不会自动更新到main的新提交 - 想持续跟踪分支最新提交?只能靠
composer update vendor/name,且确保远程分支HEAD已变 - CI 构建中若缓存了
vendor/或composer.lock,可能误用旧 commit——建议 CI 显式跑composer update --no-interaction(仅对需要的包)
别指望 --ignore-platform-reqs 解决 dev 包安装失败——那是 PHP 扩展缺失的问题,和稳定性策略无关。真正的关键点只有一个:Composer 不是“找不到包”,而是“主动拒绝考虑它”,你得亲手打开那扇门。










