composer config -g repo.packagist 总不生效是因为三个硬性条件任一缺失:键名必须为单数 repo.packagist、type 值必须显式写 composer、url 必须 https 且末尾带 /,否则静默回退官方源;验证需输出完整 json 对象。

composer config -g repo.packagist 为什么总不生效
根本不是网络或权限问题,而是三个硬性条件任一缺失都会静默回退到 packagist.org:键名必须是 repo.packagist(单数,不是 repos.packagist),type 值必须显式写成 composer,URL 必须是 HTTPS 且末尾带 /——比如 https://mirrors.aliyun.com/composer/✅,少斜杠就会拼出 /composerpackages.json 导致 404。
验证是否真正写入:运行 composer config -g repo.packagist,输出必须是完整 JSON 对象,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。返回空、null 或报错,说明配置没进去,立刻重试。
- 多用户环境(如宝塔、Docker)下,
-g配的是当前 shell 用户,而 Web 服务常以www用户运行,需切换用户执行:sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - CI 环境默认读不到个人全局配置,必须靠项目级双保险
- 某些旧版 Composer(composer -V
私有源必须写在项目 composer.json 里才真正生效
企业私有镜像(如 Satis、Private Packagist、Verdaccio)不能只靠全局配置,必须在你要装包的那个项目的根级 composer.json 中声明,否则 composer require acme/utils 会直接报 Could not find package。
关键点不是“加不加”,而是“怎么加”:
-
"repositories"是数组,私有源必须放在第一位,Composer 按顺序查找,不会合并同名包 - 必须显式禁用默认源:
"packagist.org": false要写在repositories数组外层,不是嵌套在某个仓库对象里 - URL 必须以
/结尾:"url": "https://pkgs.internal/",少斜杠会拼成https://pkgs.internalpackages.json - type 必须是
"type": "composer",不是vcs——把 Satis 地址当成 Git 仓库配,结果 Composer 尝试走 SSH 或 HTTPS clone,根本连不上 HTTP API
Satis 镜像 404 的真实原因不是网络不通
Satis 不是服务,只是静态文件生成器。它不监听端口、不启动进程,只把 packages.json 和 ZIP 写进 output-dir 目录。所谓 404,99% 是 Web 服务没暴露对路。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
必须检查三件事:
- Nginx 的
root必须精确指向satis.json中output-dir的路径,例如root /var/www/satis/web;,而不是/var/www/satis/ - 必须显式声明 JSON MIME 类型:
types { application/json json; },否则返回text/plain,Composer 拒收 - 检查
dist/下 ZIP 路径能否直连 GET,例如https://pkgs.internal/dist/monolog/monolog/2.10.0/xxx.zip;SELinux 或文件权限常锁死该路径
Verdaccio + OSS 为什么启动就失败
Composer 本身不支持对象存储语义,file_exists()、opendir()、rename() 在 OSS/S3 上全失效。所以必须用 Verdaccio 这类中间服务层做适配,但配置稍错就挂。
最容易踩的坑:
-
storage配置写成s3而不是@verdaccio/aws-s3-storage,服务启动失败但日志只报"storage not found" - OSS endpoint 漏掉
https://前缀,或用了内网域名(如oss-cn-hangzhou-internal.aliyuncs.com),Verdaccio 请求超时且不重试 - 没开
listObjects权限,Verdaccio 无法扫描已上传包,composer show返回空结果 - MinIO 在 ARM64 边缘节点上没关
fsync和磁盘检查,内存占用飙升至 512MB+,超出轻量部署边界
真正的难点不在配置语法,而在 ZIP 包和元数据的路径层级语义——对象存储没有目录概念,packages.json 和分片文件(如 provider-laravel~framework.json)必须严格按 Composer 的 URL 规则落地为 key,漏一个斜杠或大小写错误,整个镜像就不可用。










