必须在项目根目录composer.json中显式声明repositories数组,否则composer不会报错但会静默失败;它必须是json数组,每项含合法type(vcs/composer/path)和对应url,且认证凭据须通过权限为600的auth.json单独配置。

必须在项目根目录的 composer.json 里显式声明 repositories 数组,否则 composer require 或 composer install 一定失败——Composer 不会自动探测、也不会报“源未配置”这类提示,只会安静地告诉你 Could not find package。
repositories 字段怎么写才合法
它必须是 JSON 数组,每个仓库项至少含 type 和 url,且 type 只能是 vcs、composer 或 path:
-
type: "vcs":直连 Git/SVN/Hg 仓库,url填 HTTPS 或 SSH 地址(如"https://gitlab.example.com/org/pkg"),别加.git后缀 -
type: "composer":对接 Satis、Private Packagist 等服务,url是能返回packages.json的 HTTP 地址(如"https://satis.internal") -
type: "path":本地开发用,url是相对或绝对文件路径(如"../my-private-package"),支持通配符** - 常见错误:
repositories写成对象({"my-repo": {...}})、type写成"git"或"github"、url指向 GitHub 的某个 tag 页面(应指向仓库根)
认证凭据只能走 auth.json,不能硬编码
HTTPS 私有源(GitLab/GitHub)需要凭据,但绝不能拼进 URL(如 https://token@...),也不能写进 composer.json。唯一合法载体是 auth.json:
- 文件必须放在项目根目录(与
composer.json同级)或COMPOSER_HOME目录下 - 权限必须是
600(Linux/macOS),否则 Composer 静默忽略,不报错也不提示 - 内容结构为标准 JSON,
http-basic和github-oauth是平级字段,例如:
{
"http-basic": {
"gitlab.example.com": {
"username": "deploy",
"password": "xxx"
}
},
"github-oauth": {
"github.com": "ghp_xxx..."
}
}
SSH 方式(git@gitlab.com:org/pkg.git)不依赖 auth.json,但要求当前用户已将对应私钥加载进 ssh-agent。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
版本号从哪来?composer.json 里的 version 字段基本没用
对 vcs 类型仓库,Composer 完全忽略包自身 composer.json 中的 version 字段。它只认 Git 的 tag 和分支名:
- 要让
"^1.0"生效,必须打语义化 tag:v1.0.0或1.0.0(v1.0不被识别) - 分支如
main对应虚拟版本dev-main,require 时得写"dev-main",且需在项目根composer.json中设"minimum-stability": "dev" - 没打任何 tag 时,
dev-main是唯一可选;写"1.0.0"会直接报错Could not find package ... at version 1.0.0 - 修改 tag 对应的 commit 后强制推送,Git 服务器缓存可能未刷新,需运行
composer clear-cache
为什么 composer require 加了包却装不上
这不是网络或权限问题,而是配置链断裂。典型断点:
- 只运行了
composer require vendor/name,但没手动补repositories配置——这个命令不会自动加源 - 包名大小写不一致:仓库里
composer.json写的是"MyOrg/utils",require 却写成"myorg/utils" - 多个源共存时顺序错了:
repositories从上到下扫描,第一个匹配的就停,同名包后面的会被忽略 - 禁用 Packagist 默认源写法错误:必须单独加
{"packagist.org": false}作为数组中一项,不能塞进其他仓库对象里 - Satis 类型源下,包没被
php bin/satis build扫描进packages.json,浏览器打开https://satis.internal/packages.json搜不到该包名
最易被忽略的一点:所有配置都对,但 auth.json 权限是 644 或放到了子目录下——Composer 就当它不存在,且不报任何提示。










