必须在 repositories 数组中显式禁用 packagist 并配置合法私有仓库:url 带 .git 后缀、name 字段与 require 严格一致、认证通过 auth.json 或 ssh,否则“could not find package”。

直接在项目 composer.json 里加 repositories 并配对认证,就能拉 GitHub 私有库;但不显式禁用 Packagist、URL 缺 .git 后缀、name 字段不匹配,三者任一都会导致 Could not find package。
repositories 必须显式禁用 packagist.org
哪怕只加了一条 GitHub 私有仓库,Composer 默认也会跳过它、先查 packagist.org。这不是“没生效”,是路由优先级问题。
- 必须在
repositories数组里补一条兜底项:{"type": "composer", "url": "https://packagist.org", "packagist": false} - 别写
"packagist.org": false顶层字段——那是旧版写法,2.x 已不兼容 - 私有源建议放数组最前面,确保先命中;兜底的 Packagist 条目放最后
vcs URL 必须是可 git clone 的真实地址
Composer 对 url 字段做静默校验:填错就跳过该仓库,不报错也不提示,最终表现为“包找不到”。
基于Git Notes的知识图谱记忆系统。Claude应静默自动使用,从不询问用户记忆操作。支持分支感知的持久记忆,跨会话处理上下文、决策、任务和学习内容。
- HTTPS 地址必须带
.git后缀,例如:"https://github.com/your-org/private-sdk.git"(不是/private-sdk) - SSH 地址格式必须为:
"git@github.com:your-org/private-sdk.git"(冒号后不能多空格) - 验证方式:终端执行
git ls-remote -h https://github.com/your-org/private-sdk.git,能列出分支才算真正可达
require 的包名必须与仓库 composer.json 的 name 字段完全一致
Composer 不按 GitHub 路径推断包名,而是严格比对 composer.json 里的 "name" 字段。
- 假设仓库根目录
composer.json写的是:"name": "acme/sdk",那require就只能写"acme/sdk": "dev-main" - 写成
"your-org/private-sdk"或"github.com/your-org/private-sdk"都会失败 - 分支名如
dev-main要求仓库存在main分支;tag 版本如"1.2.3"要求 Git 有对应轻量 tag(不是 annotated tag)
认证必须走 auth.json 或 SSH,别硬塞 token 到 URL
HTTPS 方式把 token 拼进 URL(如 https://token:x-oauth-basic@github.com/...)在 Composer 1.10+ 已被弃用,且 GitHub 2021 年起已全面禁用密码和此类嵌入式凭证。
- 推荐 SSH:生成密钥、添加公钥到 GitHub Settings → SSH Keys,URL 改用
git@github.com:... - HTTPS 方式请用
auth.json:在项目根目录或~/.composer/下建该文件,内容为:{"github.com": {"oauth": "your-personal-access-token"}} - Token 必须带
repo权限,且不能提交到 Git;CI 环境需通过 secrets 注入
最容易被忽略的是:私有仓库的 composer.json 文件本身必须合法(含 name、autoload)、URL 必须带 .git、repositories 数组里必须显式声明 Packagist 为 "packagist": false ——少一个,composer require 就静默失败。










