私有包装不上主因是composer未识别仓库:repositories须在composer.json顶层,type必须为"vcs",url须为可clone地址(如.git结尾),auth.json权限需600且域名匹配,require包名须与私有库name字段逐字符一致,并配置"packagist.org": false。

私有包装不上,90%不是网络或权限问题,而是 Composer 根本没“看见”你的仓库——它只按你写的 repositories 列表去查,不写对位置、类型、URL 或认证路径,就等于没配。
repositories 必须写在 composer.json 顶层,且 type 必须是 "vcs"
Composer 不会递归解析嵌套字段。把 repositories 塞进 config、extra 或 scripts 里,等于白写。
-
type只能是"vcs"(小写),不是"git"、"package",也不能留空;写错就静默忽略 -
url必须是可直接git clone的地址:HTTPS 格式如https://gitlab.example.com/acme/utils.git,SSH 格式如git@gitlab.example.com:acme/utils.git - 缺
.git后缀、写成网页地址(如https://gitlab.example.com/acme/utils)会导致报错No valid composer.json was found - GitLab、GitHub、Bitbucket 都统一用
"vcs",不用区分"gitlab"或"github"
auth.json 路径、权限、结构三者必须同时正确
Composer 读 auth.json 是硬规则:找不到文件、权限不对、域名 key 不匹配,都会静默跳过,不报错也不提示。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 项目级:放在项目根目录,和
composer.json同级;全局级:Linux/macOS 是~/.composer/auth.json,Windows 是%APPDATA%\Composer\auth.json - 权限必须是
600:chmod 600 auth.json,否则直接忽略 - 域名 key 必须和
repositories.url的 host 完全一致(不含协议、端口、路径),例如gitlab.example.com:8080和gitlab.example.com是两个不同 key - GitLab 用
http-basic字段,password填glpat-开头的 Personal Access Token;Bitbucket 必须用 App Password,且结构仍为http-basic,不能用consumer-key
require 的包名必须与私有库 composer.json 中的 name 字段逐字符一致
Composer 不按 Git 路径推断包名,只严格比对私有库自身 composer.json 里的 name 字段。差一个字母、大小写、分隔符,就找不到。
- 假设私有库
composer.json写的是{"name": "acme/utils"},主项目require就必须写"acme/utils": "dev-main" - 不能写成
"Acme/utils"、"acme-utils"、"acme/utils-dev",也不能省略 vendor 段 - 分支必须加
dev-前缀:"dev-main"可行,"main"或"*"会被当成模糊约束,去 Packagist 查,查不到就失败 - 如果私有库没打任何 tag,唯一可用版本就是
dev-main(或dev-master,取决于默认分支名)
默认 packagist.org 不关掉,私有包永远不被匹配
即使你写了私有仓库 URL,Composer 默认仍优先查 packagist.org,私有源只是 fallback——除非你显式禁用。
- 必须在项目级
composer.json顶层加这一行:"packagist.org": false - 漏掉这句,哪怕私有包 100% 存在,也会报
Could not find package vendor/name - 如果是 Satis 或 Artifactory 这类私有 Composer 仓库(
type: "composer"),URL 末尾斜杠/不可省略,少一个就 404 - Artifactory 上必须选 “Package Type: composer”,Generic 或 Remote(非 composer 类型)仓库无法被识别
最容易被忽略的是 "packagist.org": false 这一行,以及 auth.json 的 600 权限——前者让私有包从“后备选项”变成“唯一选项”,后者决定了 Composer 是否愿意读你的凭证。这两处出错,其他配置全对也白搭。










