答案是源未生效:90%因{"packagist.org": false}未独立置末、repositories顺序错或VCS配置错误,导致Composer始终只查官方源而忽略私有源。

composer require 报 “Package not found” 时,90% 不是包没了,而是它根本没去你配的源里找
Composer 查包是「顺序匹配 + 命中即停」,但这个逻辑只在 {"packagist.org": false} 显式关闭官方源后才真正启用。否则无论你在 repositories 里写多少私有源,它永远先查 https://repo.packagist.org,查不到就直接报错,压根不往下走。
常见错误现象:
-
composer config repositories输出里还包含https://repo.packagist.org—— 说明没关掉 - 私有源 URL 写成
"packagist": false或"packagist.com": false→ 静默忽略,继续走默认源 -
{"packagist.org": false}没作为独立对象放在repositories数组末尾,而是嵌进其他仓库配置里 → 不生效
正确写法必须是:
"repositories": [
{"type": "composer", "url": "https://pkg.myorg.com/"},
{"packagist.org": false}
]
注意:{"packagist.org": false} 必须单独一行、独立对象、位于数组末尾;type 和 url 字段缺一不可;别用 composer config --global repos.packagist false,那是全局污染。
为什么 composer search 能搜到,require 却装不上?
composer search 只查 packagist.org 全局索引,不校验 PHP 版本、扩展、稳定性或你本地的 repositories 配置;而 composer require 是真安装,会严格按 repositories 顺序 + minimum-stability + 实际元数据匹配执行。
典型误导场景:
-
composer search myorg/utils成功 → 你以为私有源生效了,其实只是 Packagist 上有个同名空包,你的内网源压根没被访问 - 包只有
dev-main版本,但项目设了"minimum-stability": "stable"→ Composer 直接跳过,报 “not found”,不是 “版本不匹配” - VCS 类型仓库(Git/GitLab)URL 结尾带
#main或/tree/main→ 元数据读取失败,静默忽略整条配置
验证方式:运行 composer show -a vendor/name,看输出末尾括号里的标签(如 v2.0.0-beta1 (beta)),再比对 minimum-stability 设置是否覆盖该级别。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
minimum-stability 设置不对,会导致“包存在却找不到”
minimum-stability 是 composer.json 顶层字段(与 require 同级),值必须是小写 dev/alpha/beta/RC/stable(注意 RC 必须全大写);写错位置(比如塞进 config 或 extra)就完全无效。
关键点:
- 它只约束“未显式标注稳定性后缀”的包。例如
"monolog/monolog": "^3.0"受限;但"monolog/monolog": "^3.0@stable"完全绕过 - 改完必须运行
composer update --lock,否则composer.lock不刷新,新设置不生效 - 单包加
@dev或@beta比全局调低minimum-stability更安全,不影响其他依赖 - 必须配
"prefer-stable": true,否则即使允许beta,Composer 也可能选v3.0.0-beta3而不是已发布的v2.9.5 (stable)
推荐组合:
"minimum-stability": "beta", "prefer-stable": true
VCS 私有仓库始终 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 名、分隔符都需严丝合缝) - 分支或 tag 名必须真实存在:
"dev-main"要求远程有main分支,"1.2.3"要求有对应 Git tag,不能是release-1.2.3或v1.2.3-final
最容易被忽略的是:VCS 配置错一个字段,Composer 就会静默忽略它,继续查默认源,结果当然还是 “not found”——你看到的错误信息根本不会提示配置失效。

















