必须在composer.json的repositories中显式声明vcs类型仓库,url为可克隆地址且不带.git后缀,包名须与私有库composer.json的name字段完全一致,并配置auth.json认证或ssh密钥;未打合法git tag时需设"minimum-stability": "dev"。

私有包分发不是“把代码放 Git 上就能 composer require”,核心卡点永远在「源注册」和「版本可发现」——漏配 repositories、没打合法 Git tag、或认证失败,都会直接导致 Could not find package。
怎么让 composer require 找到内网 Git 包
Composer 默认只查 packagist.org,你仓库再规范,它也不会主动扫描你的 GitLab。必须显式告诉它“去哪找”:
-
repositories必须写在项目根目录的composer.json顶层,不能嵌套在config或其他字段里 - 类型必须是
"vcs"(不是"git"、"package",也不留空) -
url填完整克隆地址:"https://gitlab.example.com/acme/utils"(结尾不加.git,官方明确建议省略) - 如果用 HTTPS,需提前配置
auth.json:放在项目根目录或全局(~/.composer/auth.json),权限设为600,内容格式为:{"http-basic": {"gitlab.example.com": {"username": "oauth2", "password": "glpat-xxx"}}} - SSH 方式不走
auth.json,靠系统ssh-agent和密钥,确保ssh -T git@gitlab.example.com能通
为什么 dev-main 装不上,或者装了却报 Your requirements could not be resolved
Composer 默认只认稳定版本(stable),而私有包往往还没打正式 tag,dev-main 这类分支名默认被跳过:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须在项目
composer.json中声明:"minimum-stability": "dev",<br>"prefer-stable": false
(后者设true表示“有 stable 就用 stable,没有才退 dev”) - 分支名要和远程一致:Git 默认主干是
main,就写dev-main;旧仓库用master,才写dev-master - 如果想用语义化约束(如
"^1.0"),必须打合法 Git tag:v1.0.0、v1.2.3(v1.0或1.0.0不被识别) - 打 tag 后必须推送:
git tag -a v1.0.0 -m "release"→git push --tags - 调试用:
composer show acme/utils --all,看输出里有没有列出你要的版本;如果没有,说明 tag 没生效或权限/URL 错了
怎么避免每个项目都重复写 repositories
全局配置一次,所有项目自动继承,省得漏配、写错、后期改起来满世界找:
- 运行:
composer config -g repositories.my-private type composer --url https://packages.internal/ - 注意:
type必须是composer(不是vcs),url必须返回有效的packages.json(HTTP 状态码 200,MIME 类型application/json) - 这个方案依赖 Satis、GitLab Package Registry 或 Artifactory 等服务生成的静态源,不是直连 Git
- Composer 2.0+ 支持,1.x 不支持全局
repositories,升级前先composer --version确认 - 若同时用了私有源和 Packagist,务必在
repositories数组末尾加:{"packagist.org": false},否则私有包可能被忽略
打包发布时最容易忽略的三个硬性条件
就算源配对、tag 打好、认证通过,生产环境仍可能跑不起来——因为少了这三步:
- 安装时必须加
--no-dev --optimize-autoloader:跳过测试依赖,生成类映射表;漏掉会导致Class not found或首页超时 -
composer.lock必须随代码一起分发:它是依赖版本锁定的唯一依据,没它,composer install会按最新兼容版本重算,结果不可控 - 如果用了 PSR-4 autoload,确保
composer.json中autoload段已正确定义,且路径相对于composer.json所在位置;改完后必须composer dump-autoload生效
真正难的不是配置命令,而是每个环节都得闭环:Git 权限对、tag 格式对、repositories 类型对、auth.json 位置和权限对、composer.lock 存在且未被 .gitignore 掉——少一个,require 就静默失败或报错模糊。










