composer报“package not found”90%是源未生效:repositories顺序错、packagist.org未禁用(需{"packagist.org": false}独立置末)、vcs类型写错或url不合法;composer search仅查packagist全局索引,require则严格按配置源+stability+元数据匹配。

Composer 报 Package not found,90% 不是包真没了,而是它根本没去你配的私有源或镜像里找——源没生效、顺序错、packagist.org 没关,或者 repositories 根本没写对位置。
为什么 composer require 找不到包,但 composer search 能搜到
composer search 只查 packagist.org 全局索引,不校验 PHP 版本、扩展、稳定性或你本地的 repositories 配置;而 composer require 是真安装,会严格按 repositories 顺序 + minimum-stability + 实际元数据匹配来执行。
- 包只有
dev-main版本,但项目设了"minimum-stability": "stable"→ 直接跳过,报“not found”,不是“版本不匹配” -
composer search myorg/utils成功,不代表你能装:可能只是 packagist 上有个同名空包,你的私有源压根没被访问 - 运行
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 类型仓库(Git/GitLab)为什么始终 404
VCS 仓库不参与全局元数据索引,只在你明确 require vendor/name 时才触发拉取。报 404 的真实原因,往往不是网络不通,而是第一步元数据读取失败。
-
type必须写"vcs",写成"git"、"github"或漏掉,整条配置被忽略 - URL 必须是可
git clone的地址,且结尾**不能带 .git 后缀以外的路径**(如https://gitlab.example.com/myorg/utils.git✅,https://gitlab.example.com/myorg/utils.git#main❌) - 目标仓库根目录必须有合法
composer.json,且其中name字段与require中写的**完全一致**(大小写、vendor 名、斜杠方向) - 私有 Git 仓库需确保 Composer 能认证(SSH key 或 token),否则
curl -I看返回是不是401或403
验证哪个源真正在起作用
光看 composer.json 写得对不对没用,得看 Composer 实际请求了谁。
- 加详细日志运行:
composer require myorg/utils -vvv - 重点扫日志里有没有类似这样的行:
Reading composer.json of https://pkg.myorg.com/packages.json Found package "myorg/utils" in version "1.2.0"
- 如果只看到
Reading composer.json of https://repo.packagist.org/packages.json,说明你的私有源根本没被访问 - 用
curl -s https://pkg.myorg.com/packages.json | jq '.providers | keys'确认该源是否真的声明了你要的包名
最容易被忽略的是:私有源的 packages.json 里没列 providers,或者用了旧版 Satis/Toran 没生成完整索引——这时 Composer 查不到包,连错误提示都不会给,直接跳过。










