答案是repositories未生效:顺序错、packagist.org未禁用(需{"packagist.org": false}独立置末)、配置未放composer.json根级;require必须显式指定dev版本,search仅查Packagist不校验配置。

composer require 报“Package not found”但包实际存在
不是包真没了,而是 Composer 根本没去你配的源里找。最常见原因是 repositories 没生效:顺序错、packagist.org 没关、或配置位置不对。
关键点:
-
repositories必须写在项目composer.json的根级(和require同级),不能塞进autoload或其他字段里 -
{"packagist.org": false}必须是repositories数组里的一个**独立对象**,且必须放在私有源之后、数组末尾 - 写成
"packagist": false或"packagist.com": false会被静默忽略 - 别用
composer config --global repos.packagist false,这是全局污染,其他项目会崩
dev-main / dev-feature 分支装不上
分支名必须带 dev- 前缀,且不能省略版本约束——Composer 默认只认 stable,不写明就直接跳过。
正确做法:
- 本地包或 VCS 仓库中,分支名是
main,require 时写composer require vendor/name:dev-main - 分支叫
feature/auth,就得写dev-feature/auth,不能只写feature/auth - 如果本地包没设
"version": "dev-main",又没开minimum-stability,那@dev也无效 - path 类型仓库必须显式指定版本,
composer require vendor/name(无版本)一定失败
minimum-stability 配置怎么设才安全
设成 "dev" 是最快能装上开发版的方法,但它是全局降级,容易连带升级其他依赖出问题。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
更稳妥的路径:
- 临时装包:用
composer require vendor/name --stability=dev --no-update,再单独composer update vendor/name - 长期开发:在
composer.json顶层加"prefer-stable": true,配合"minimum-stability": "dev",这样非必要不升 dev 版 - 检查已有包是否卡住:运行
composer show -a vendor/name,看输出里哪些版本标了dev,再比对你的约束是否匹配
为什么 composer search 能搜到,require 却找不到
composer search 只查 packagist.org 全局索引,不校验 PHP 版本、扩展、稳定性或你本地的 repositories;而 composer require 是真安装,会严格按 repositories 顺序 + minimum-stability + 实际元数据匹配执行。
典型陷阱:
- 搜到的是 Packagist 上同名空包,你的私有源压根没被访问
- 包只有
dev-main,但项目设了"minimum-stability": "stable"→ 直接跳过,报 “not found”,不是 “版本不匹配” - 运行
composer config repositories,输出里如果还包含https://repo.packagist.org,说明packagist.org没禁用,私有源再靠前也白搭
真正起作用的永远是 repositories 数组顺序 + {"packagist.org": false} 独立置末 + 显式版本约束这三者同时成立。少一个,就会回到默认行为——只查官方源、只认 stable、只忽略你写的私有地址。

















