Composer全局镜像配置composer config -g repo.packagist在局域网私有镜像中静默失效,因其仅替换元数据源(packages.json),不修改包的dist.url;ZIP仍按lock文件中原始GitHub地址下载,而局域网无法访问;必须删vendor和composer.lock、清缓存、确保私有源URL末尾带/、显式设"packagist.org": false,并验证Nginx/Nexus正确暴露dist路径且返回200与application/zip。

直接改 composer config -g repo.packagist 不行——它只换元数据入口,ZIP 包仍从 GitHub 等原始 dist.url 下载,而局域网根本打不开这些地址。真要跑通,必须让所有依赖的 ZIP 文件都能通过内网 HTTP 直接 GET 到。
为什么 composer config -g repo.packagist 在局域网里静默失效
这条命令在公网镜像(如阿里云)下能凑合用,但在局域网私有镜像场景下几乎必然失败,原因很实在:
- 它只修改
packages.json的获取地址,不碰任何包的dist.url字段;而 Satis/Nexus 生成的 ZIP 默认放在dist/xxx.zip路径下,Composer 仍会按原始 URL 去抓 - 局域网镜像服务(如 Nginx 挂 Satis 输出目录、Nexus Composer group)若没暴露 ZIP 路径或 MIME 类型不对,
composer install就会卡在 404 或返回text/plain被拒绝 - CI 环境(如 GitLab Runner)、Docker 容器、宝塔 www 用户默认读不到你本地
~/.composer/config.json,全局配置形同虚设
项目级 repositories 怎么写才真正生效
必须写进你要装包的那个项目的 composer.json 根层,且顺序和字段不能错:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 私有源必须是
"type": "composer",URL 是托管packages.json的根地址,且末尾必须带/(例如"url": "http://nexus:8081/repository/composer-group/") -
"packagist.org": false必须显式写在repositories数组顶层,不是嵌套在某个仓库对象里 - 私有源必须放在
repositories数组第一位,Composer 按顺序查找,不会合并同名包 - 如果已有其他仓库(比如私有
package定义),别手动覆盖整个数组,用composer config repo.packagist composer http://...命令追加更安全
Nginx 或 Nexus 暴露 ZIP 路径时容易踩的坑
镜像服务本身不“主动分发”,只是静态文件托管,路径和响应头稍有偏差就会 404 或被 Composer 拒收:
- Nginx 的
root必须精确指向 Satis 的output-dir(如root /var/www/satis/web;),不能多一层或少一层 - 必须显式声明 JSON MIME 类型:
types { application/json json; },否则packages.json返回text/plain,Composer 直接跳过 - 验证 ZIP 是否可直连:打开浏览器或
curl -I访问类似http://pkgs.internal/dist/monolog/monolog/2.10.0/monolog-2.10.0.zip,HTTP 状态码必须是 200,Content-Type 是application/zip - SELinux 或文件权限常锁死
dist/目录,ls -Z和setsebool -P httpd_can_network_connect 1得查一查
换源后仍 Could not find package 或卡在 Downloading?先看这几处
别急着换别的镜像,90% 是本地残留或服务暴露没对齐:
- 删掉项目下的
vendor/和composer.lock—— Composer 会优先读 lock 文件里的旧dist.url,改配置也白搭 - 运行
composer clear-cache,再执行composer install -vvv,盯着日志里实际请求的是哪个域名和路径 - 确认 Web 服务(Nginx/Nexus)监听端口已开、防火墙放行、DNS 解析正确(尤其 Docker 内部网络常需用宿主机 IP 替代
localhost) - 如果用 Nexus,务必确认版本 ≥ 3.68.0,旧版压根没有
composer (proxy)类型选项,控制台搜不到就是功能缺失,不是配置问题
最麻烦的点不在命令怎么敲,而在 ZIP 文件路径是否真实可 GET、MIME 类型是否被正确识别、以及项目级配置是否覆盖了所有执行环境——这三个环节漏一个,镜像就只是个摆设。

















