私有仓库URL末尾缺斜杠会导致404错误,因Composer拼接时生成非法路径如/my-virtual-repopackages.json;正确写法必须带末尾斜杠,且需配置"packagist.org": false、清除缓存并验证响应为200 JSON。

私有仓库URL末尾缺斜杠导致404
Composer拼接元数据路径时,会把配置的url和固定后缀packages.json直接拼接。配成https://artifactory.example.com/artifactory/api/composer/my-virtual-repo(缺/),实际请求的就是https://artifactory.example.com/artifactory/api/composer/my-virtual-repopackages.json——这个地址必然404。
正确写法必须带末尾斜杠:https://artifactory.example.com/artifactory/api/composer/my-virtual-repo/
- 验证方式:运行
composer config -g repo.packagist或检查项目repositories字段,确认url值以/结尾 - 手动测试:
curl -I https://artifactory.example.com/artifactory/api/composer/my-virtual-repo/packages.json应返回HTTP/2 200,且响应体是合法JSON(含顶层packages键) - Artifactory、Satis、Private Packagist等所有Composer类型仓库都遵循该规则,少一个
/就失败
repositories配置中type与url不匹配
Composer在解析阶段就校验type和url是否合法,不满足就直接报invalid repository,根本不会发HTTP请求。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
"type": "composer"→url必须是HTTPS地址,末尾带/,且能返回packages.json -
"type": "vcs"→url必须是Git/SVN/Hg地址,如https://gitlab.example.com/group/pkg.git;网页地址(.git结尾缺失)会静默失败 -
"type": "package"→ 不需要url字段,但必须提供完整package对象,含name、version、dist或source - 运行
composer diagnose,它会明确指出哪条repositories配置“failed to parse”
packagist.org未显式禁用引发冲突
私有仓库启用后,若没关掉官方源,Composer可能仍尝试从packagist.org拉取包,结果找不到就报404——尤其当你只在私有源里放了部分包时。
必须在repositories数组末尾加这一行:"packagist.org": false
- 漏掉这行,错误信息常为
Could not find package vendor/name,哪怕该包100%存在于你的私有仓库 - 该字段是布尔值,不是字符串,不能写成
"packagist.org": "false" - 如果项目同时需要私有源+部分公共包,得用
composertype虚拟仓库聚合,而非保留packagist.org直连
缓存残留让Composer读错元数据
换源或更新私有仓库后,composer.lock里仍存着旧源的provider URL;Composer拿着这些地址去新源上找包,必然404——日志里看不到镜像域名,只卡在Loading composer repositories。
- 先清缓存:
composer clear-cache;Windows还需手动删%APPDATA%\Composer\cache - 删掉
vendor/和composer.lock(别只删vendor) - 重跑
composer install -vvv 2>&1 | head -n 10 | grep Downloading,看第一行真实请求URL是否指向你的私有源 - 元数据缓存藏得深:
~/.composer/cache/repo/https---artifactory-example-com这类路径也得手动清理
"packagist.org": false被当成可选项漏掉,或者composer.lock里残留的旧provider地址还在悄悄生效。

















