repositories必须写在composer.json顶层且type为"vcs",否则静默忽略;url须为可git clone地址(如含.git后缀),auth.json需置于正确路径并设600权限,包名须与私有库composer.json中name字段完全一致,并显式禁用packagist.org。

repositories 必须写在 composer.json 顶层,且每项 type 是 "vcs"
Composer 不会扫描子字段或嵌套结构里的 repositories,它只认最外层的数组。写错位置(比如塞进 config 或 scripts 里)等于没写。
type 字段必须是 "vcs",不是 "git"、"package",也不能留空或写成大写 "VCS"——写错就静默忽略,不报错也不拉取。
URL 必须是能直接 git clone 的地址:
- HTTPS 格式:必须带
.git后缀,如https://gitlab.example.com/acme/utils.git;写成https://gitlab.example.com/acme/utils会报No valid composer.json was found - SSH 格式:如
git@gitlab.example.com:acme/utils.git,需确保 SSH agent 已加载对应密钥 - 不能是网页地址(如
https://gitlab.example.com/acme/utils/-/tree/main)
auth.json 要放对路径、设对权限、字段名一个都不能错
90% 的认证失败不是 token 无效,而是 auth.json 没被 Composer 读到——它不会提示,只会 fallback 到匿名请求,然后 403。
路径必须严格匹配:
- Linux/macOS:
~/.composer/auth.json(不是项目根目录!) - Windows:
%APPDATA%\Composer\auth.json
权限必须是 600:chmod 600 ~/.composer/auth.json,否则 Composer 直接跳过。
GitLab 和 Bitbucket 都要用 http-basic 结构,域名 key 必须和 repositories.url 中的 host 完全一致(不含协议、端口、路径):
{ "http-basic": { "gitlab.example.com": { "username": "oauth2", "password": "glpat-xxx" } } }
GitHub 稍不同,用 github-oauth 字段,但同样要求域名精确匹配(github.com,不是 api.github.com)。
require 的包名必须和私有库 composer.json 里的 name 字段完全一致
Composer 不按 Git 路径匹配,只比对私有库自身 composer.json 中的 name 字段。差一个字符、大小写不对、用了下划线而不是短横线,都会报 Could not find package。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
假设私有库根目录的 composer.json 写的是:
{ "name": "acme/utils", "version": "1.0.0" }
那主项目 require 就必须写:
"acme/utils": "dev-main"
不能写成:
-
"Acme/utils"(大小写敏感) -
"acme-utils"(短横线 vs 下划线) -
"main"或"*"(分支别名必须加dev-前缀)
如果私有库没打任何 tag,唯一可用版本就是 dev-main(或 dev-master,取决于默认分支名)。
必须显式禁用 packagist.org,否则私有包永远不生效
哪怕你写了完整的私有仓库 URL,只要没关掉默认源,Composer 就会优先去 packagist.org 查包,查不到才 fallback——而 fallback 不会触发私有源认证逻辑,结果就是 Could not find package。
必须在项目级 composer.json 里加这一行:
"packagist.org": false
它必须和 repositories 同级,不能缩进、不能放在子对象里。漏掉这行,前面所有配置都白搭。
如果用的是 Satis 或 Artifactory 这类 Composer 类型镜像源,URL 末尾的 / 也不能省——少一个就会拼出 packages.json 错误路径,导致 404。










