Composer报“Package not found”90%是源未生效:repositories顺序错、packagist.org未禁用(需{"packagist.org": false}独立置末)、type写错或私有源未声明该包;composer search仅查Packagist全局索引,require则严格按配置源+stability+元数据匹配执行。

Composer 报 Package not found,90% 不是包真没了,而是它压根没去你配的私有源里找——repositories 顺序错、packagist.org 没关、类型写错,或者私有源根本没声明那个包。
为什么 composer search 能搜到,composer require 却失败
composer search 只查 packagist.org 全局索引,不校验 PHP 版本、扩展、稳定性,也不读你本地 composer.json 里的 repositories 配置;而 composer require 是真安装,会严格按 repositories 顺序 + minimum-stability + 实际元数据匹配来执行。
- 包只有
dev-main版本,但项目设了"minimum-stability": "stable"→ 直接跳过,报Package not found,不是“版本不匹配” -
composer search myorg/utils成功,不代表你能装:可能只是packagist.org上有个同名空包,你的私有源压根没被访问 - 运行
composer config repositories,输出里如果还包含https://repo.packagist.org,说明packagist.org没禁用,私有源再靠前也白搭
repositories 数组顺序和 packagist.org 开关必须同时满足
Composer 查包是「从上到下,命中即停」,但这个逻辑只在 packagist.org 被显式关闭后才启用。否则它永远先查官方源兜底。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
{"packagist.org": false}必须是repositories数组里的一个独立对象,不能嵌套进其他仓库配置里 - 它必须放在私有源之后、数组末尾(不是开头),例如:
"repositories": [ {"type":"composer","url":"https://pkg.myorg.com/"}, {"packagist.org": false} ] - 写成
"packagist": false或"packagist.com": false会被静默忽略,继续走官方源 - 别用
composer config --global repos.packagist false,这是全局污染,其他项目会崩
VCS 类型仓库为什么始终 404
VCS 仓库(Git/GitLab)不参与全局元数据索引,只在你明确 require vendor/name 时才触发拉取。报 404 的真实原因,往往不是网络不通,而是第一步元数据读取失败。
- 把 Satis 地址配成
"type": "vcs",Composer 就会尝试git clone一个 HTML 页面,报Could not find package - 私有源
packages.json不完整:比如只包含{"providers": {"myorg/utils": {}}},但没展开具体版本信息,Composer 就当它不存在 -
type必须显式写对:"type": "vcs"对应 Git 仓库,"type": "composer"对应 Satis / Private Packagist 等索引服务
验证私有源是否真正生效
光改配置不够,得看 Composer 实际请求了哪个 URL。
- 运行
composer config repositories,确认输出里没有https://repo.packagist.org,且你的私有 URL 在最前面 - 加
-vvv跑一次composer update vendor/package,看日志里是否出现该 URL 的Reading composer.json of行 - 如果日志里只看到
https://repo.packagist.org或镜像地址,说明{"packagist.org": false}没生效,或位置错了 - 私有源返回 404 不等于失败——只要它返回了非 404 响应(哪怕内容为空),Composer 就认为“查过了”,后续仓库全跳过
最容易被忽略的是:私有源的 packages.json 必须包含你要装的包名和至少一个可用版本的完整元数据;否则 Composer 连请求都不会发,直接跳过,也不报错。

















