必须将repositories写在composer.json顶层,type必须为"vcs"(非"git"),url须以.git结尾或含正确斜杠,auth.json需置于指定路径且权限为600,包名须与私有库composer.json中name字段逐字符一致,并同级声明{"packagist.org": false}禁用官方源。

repositories 必须写在 composer.json 顶层,且 type 不能是 git
Composer 只会在解析项目级 composer.json 的最外层 repositories 数组里找私有源。嵌套在 config、extra 或 scripts 里等于没写。
type 字段必须是 "vcs"(小写),不是 "git"、"package",也不能留空——写错就静默忽略,不报错也不拉取。
- HTTPS 地址必须以
.git结尾:如https://gitlab.example.com/acme/utils.git,写成/acme/utils会提示No valid composer.json was found - SSH 地址格式为
git@gitlab.example.com:acme/utils.git,需确保系统 SSH agent 已加载对应密钥 - 若用 Artifactory 或 Satis 等 Composer 类型仓库,
type应为"composer",URL 末尾斜杠/不可省略
auth.json 路径、权限、结构三者缺一不可
Composer 不读系统 Git 凭据,也不走 SSH agent(VCS 模式下),只认 auth.json 文件——且只在两个位置有效:
- Linux/macOS:
~/.composer/auth.json(不是项目根目录) - Windows:
%APPDATA%\Composer\auth.json - 文件权限必须是
600:运行chmod 600 ~/.composer/auth.json,否则直接跳过
结构必须严格匹配域名,例如仓库 URL 是 https://gitlab.example.com/group/repo.git,则 auth.json 中的 key 就只能是 "gitlab.example.com",不能带端口、路径或协议前缀。
GitLab 用 http-basic 字段,Token 填在 password 里;GitHub 用 github-oauth 字段;Bitbucket 必须用 http-basic + App Password,且 username 是账号名,password 是生成的 App Password。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
require 中的包名必须和私有库 composer.json 的 name 字段逐字符一致
Composer 不按 Git 路径匹配,只比对私有包自身 composer.json 里的 name 字段。差一个字母、大小写、分隔符(如 - vs /),就报 Could not find package。
- 私有库中写的是
"name": "acme/utils",主项目require就必须是"acme/utils": "dev-main" - 不能写成
"Acme/utils"、"acme-utils"、"acme/utils-dev",也不能省略 vendor 段 - 分支名要加
dev-前缀:"dev-main"可行,"main"或"*"会被当模糊约束去 Packagist 查,查不到就失败
不显式禁用 packagist.org,私有包永远是 fallback
即使你在 repositories 里写了 Artifactory、Satis 或 GitLab 地址,只要没关掉默认源,Composer 就优先查 packagist.org,私有包只作为兜底——结果就是“明明包存在,却找不到”。
必须在项目级 composer.json 顶层加这一行:
{"packagist.org": false}
注意:这行不能放在 repositories 数组里,也不能缩进,必须和 repositories、require 同级;漏掉它,所有私有配置都白搭。
另外,如果用了 Satis 镜像,还要确认 packages.json 能被直接 curl -I https://satis.example.com/packages.json 访问到(返回 200),否则 Composer 会静默 fallback 回公网。










