“Package not found”主因是源未生效:repositories顺序错误、packagist.org未禁用(需{"packagist.org": false}独立置末)、或VCS/path配置位置/格式错误;search查全局索引,require则严格按配置源+stability+元数据匹配。

“Package not found”不是包真没了,而是 Composer 根本没去你配的源里找——源顺序错、packagist.org 没关、repositories 写错位置,三者占其一就必报错。
为什么 composer require 找不到包,但 composer search 能搜到
composer search 只查 packagist.org 全局索引,不校验 PHP 版本、扩展、稳定性或你本地的 repositories 配置;而 composer require 是真安装,会严格按 repositories 顺序 + minimum-stability + 实际元数据匹配来执行。
- 你搜到的
myorg/utils,可能只是 Packagist 上一个同名空包,你的私有源压根没被访问 -
composer config repositories输出里如果还包含https://repo.packagist.org,说明packagist.org没禁用,私有源再靠前也白搭 - 包只有
dev-main版本,但项目设了"minimum-stability": "stable"→ 直接跳过,报 “not found”,不是 “版本不匹配”
repositories 必须这样写才生效
repositories 数组顺序和 packagist.org 开关必须同时满足。Composer 查包是「从上到下,命中即停」,但这个逻辑只在 packagist.org 被显式关闭后才启用。否则它永远先查官方源兜底。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
{"packagist.org": false}必须是repositories数组里的一个独立对象,不能嵌套进其他仓库配置里 - 它必须放在私有源之后、数组末尾(不是开头),例如:
"repositories": [<br> {"type":"composer","url":"https://pkg.myorg.com/"},<br> {"packagist.org": false}<br>] - 写成
"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,否则 Composer 无法解析包信息
本地 path 包配置失败的硬性条件
直接在已有项目中配置本地包,核心就三点:主项目 composer.json 声明 path 仓库、本地包目录下有合法的 composer.json、且二者 name 字段必须逐字一致。漏掉任一,composer install 或 update 都会静默跳过,转头去 Packagist 找包,然后报 Could not find package。
-
url必须是相对路径(如"../my-pkg"或"./packages/utils"),绝对路径(C:/work/my-pkg)和环境变量(~/my-pkg)一律无效 -
type必须为"path",写成"package"或漏写会彻底失效 - 本地包
composer.json的name必须和require完全匹配:大小写、vendor 名、分隔符都必须严丝合缝 - 首次引入必须用
composer update vendor/name(不是install),因为install只读composer.lock,不重新解析仓库类型
最常被忽略的是:repositories 没放对位置(必须和 require 同级,在 composer.json 根级),以及 packagist.org 没关——这两点不解决,改再多 URL 或重装 Composer 都没用。

















