必须在项目 composer.json 的 repositories 中配置 type 为 vcs 并指定 GitHub 完整地址,且目标仓库根目录需有含正确 name 字段的 composer.json;否则 Composer 默认只查 Packagist,导致“Could not find package”错误。

直接在项目 composer.json 里加 repositories 配置,类型设为 vcs,URL 填 GitHub 完整地址,并确保目标仓库根目录有合法 composer.json(含正确 name 字段),才能成功安装。漏掉任意一环都会报 Could not find package。
为什么 composer require vendor/name 总是报“找不到包”
这不是网络问题,也不是权限问题,而是 Composer 根本没去你的 GitHub 地址查——它默认只连 Packagist。必须手动告诉它“这个包在哪”。
-
repositories必须写在项目根目录的composer.json顶层,不能嵌套在config或其他字段下 - 类型必须是
"type": "vcs",写成"git"、"package"或留空都无效 -
url要填完整可git clone的地址,例如"https://github.com/your-org/your-package"(不带.git后缀更稳妥) - 目标仓库根目录必须存在
composer.json,且其中name字段值(如"your-org/your-package")必须和require里写的完全一致(大小写、斜杠方向、vendor 名一个都不能错)
dev-main 安装失败?其实是稳定性策略卡住了
Composer 默认只接受稳定版(stable),而 dev-main 是开发版,会被直接过滤掉。报错提示 “no matching package found”,大概率就是这个原因。
对 GitHub Actions 工作流 YAML 文件进行 lint 与验证,检查常见错误、安全隐患、已废弃的操作以及最佳实践。适用于要求进行代码检查、验证等场景。
- 最稳妥做法:在
composer.json顶层加"minimum-stability": "dev",同时建议加"prefer-stable": true,这样既允许安装dev-main,又不影响其他依赖优先选稳定版 - 如果只想对单个包放宽,不用动全局配置,改用别名写法:
"your-org/your-package": "dev-main as 1.0.0" -
dev-main不代表“实时最新”,它只是锁定执行composer install那一刻main分支的 HEAD;后续要拉新代码,得composer update your-org/your-package,必要时先composer clear-cache
私有仓库认证失败怎么办
HTTPS 方式需要提前配好 Git 凭据,SSH 方式则必须确保本地能通 ssh -T git@github.com。
- HTTPS 推荐用
git config --global credential.helper store缓存账号密码或 token - SSH 地址格式应为
"git@github.com:your-org/your-package.git",注意域名后是冒号不是斜杠 - 若用 GitHub Token,HTTPS URL 可写成
"https://<token>@github.com/your-org/your-package"</token>,但不推荐硬编码进composer.json,应通过auth.json管理 - 验证是否生效:手动运行
git clone https://github.com/your-org/your-package,能成功就说明认证没问题
更新后代码没变?别被缓存和 lock 文件骗了
Composer 不会自动 git pull,它只认 composer.lock 里记录的 commit reference。远程改了代码,本地 vendor 目录里的内容不会自动同步。
- 先确认远程分支确实有新 commit:
git ls-remote https://github.com/your-org/your-package.git main | head -1 - 清缓存:
composer clear-cache - 更新指定包:
composer update your-org/your-package --with-dependencies - 如果还是旧代码,检查
composer.lock中该包的"source": {"reference": "..."}字段,删掉vendor/your-org/your-package和 lock 文件中对应段,再重装
最容易被忽略的是:包名匹配必须一字不差,且 composer.json 里不能缺 name 字段;dev-main 类型版本永远受 minimum-stability 控制,不是写了就能装;所有配置都只在项目级生效,不存在“全局启用 GitHub 源”这种事。

















