私有仓库需在composer.json的repositories顶层声明"type": "vcs"及可clone的git url,require的包名须与私有库composer.json中name字段完全一致,版本约束依赖git tag或分支名,认证通过auth.json(https)或ssh密钥(ssh)完成。

私有仓库必须显式声明为 vcs 类型,否则 Composer 直接忽略
Composer 默认只查 Packagist,不会自动扫描或信任任意 Git 地址。哪怕你把私有仓库 URL 写进 composer.json 的顶层字段,只要没包在 repositories 数组里、没设 "type": "vcs",它就当没看见。
-
repositories必须是顶层字段,不能嵌套在其他配置下 - URL 必须是可直接
git clone的地址(如https://gitlab.example.com/group/pkg.git或git@gitlab.example.com:group/pkg.git),不能是网页链接 - 别写成
"type": "package"或漏掉type——这两种写法都会导致Could not find package xxx - 如果用 HTTPS,
.git后缀建议保留(尤其 GitLab),虽然部分情况能 fallback,但官方文档和实际 CI 行为更稳定
认证失败的 90% 是因为 auth.json 没放对位置或格式错
HTTPS 方式下,Token 不能拼在 URL 里(如 https://token@... 已被弃用且不安全),也不能硬编码进 composer.json;SSH 方式则完全不走 auth.json,靠系统 SSH 配置。
-
auth.json必须放在项目根目录(./auth.json)或用户主目录(~/.composer/auth.json),权限设为600 - 内容必须是标准 JSON,外层是对象,
http-basic和github-oauth是并列字段,不能嵌套 - GitLab 示例:
{"http-basic": {"gitlab.example.com": {"username": "oauth2", "password": "glpat-xxxxxxxxxxxxxxxxxxxx"}} - GitHub 推荐用
github-oauth字段,Token 需含read:packages权限
require 的包名必须和私有库 composer.json 里的 name 完全一致
Composer 查包不是按 URL 路径,而是严格比对 name 字段。大小写、斜杠前后顺序、vendor 名拼写,差一个字符就报错。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 假设私有库根目录
composer.json写的是"name": "MyOrg/utils",那require里必须写"MyOrg/utils",写成"myorg/utils"就会失败 - GitLab 项目路径是
group/subproject,不代表包名就是它——包名由其内部composer.json决定 - 没有
name字段的私有库,Composer 会直接拒绝安装,不给任何提示
版本约束写 dev-main 还是 v1.0.0,取决于有没有打 Git tag
Composer 不读私有库 composer.json 里的 version 字段,只认 Git 的 tag 或分支名。写错版本约束,就会卡在“找不到满足条件的版本”。
- 想用主干最新代码:写
"MyOrg/utils": "dev-main"(注意不是dev-master,新项目默认分支名是main) - 想锁定正式版:先在私有库执行
git tag v1.0.0,再写"MyOrg/utils": "^1.0" - 如果只写了
"MyOrg/utils": "1.0.0"但没打 tag,Composer 会报Could not find package MyOrg/utils at version 1.0.0 - CI 环境下务必加
--prefer-source,避免因缓存导致拉不到最新 commit
最常被跳过的其实是缓存和权限:运行 composer clear-cache 再试一次,检查 auth.json 是否真被读取(加 -v 参数看详细日志),还有 ~/.ssh/known_hosts 里是否缺目标主机指纹——首次 SSH 连接失败,后续所有 composer install 都会静默卡住。










