composer全局镜像配置必须同时满足键名repo.packagist、type值composer、url以https://开头且末尾带/三要素,缺一则静默回退官方源;验证需输出完整json如{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}。

Composer 导出加速配置不是“配完就快”,而是必须同时满足键名、type 值、URL 格式三要素,漏一个就会静默回退到 https://packagist.org,且不报错。
为什么 composer config -g repo.packagist 总是不生效
这条命令看似简单,实则极其脆弱,常见失效原因全在细节里:
-
repo.packagist必须是单数——写成repos.packagist或packagist.org,Composer 直接忽略,不提示、不报错 - 第二个参数必须显式写
composer,它是 type 值,不是可选注释:composer config -g repo.packagist https://mirrors.aliyun.com/composer/❌ 会 fallback 到官方源 - URL 必须以
https://开头,且末尾带/:https://mirrors.aliyun.com/composer❌ 会导致请求路径拼成/composerpackages.json,返回 404 - 执行用户和实际运行用户不一致:你在终端用
sudo composer config -g,写入的是/root/.composer/config.json,但 CI 或宝塔后台以www用户运行,根本读不到
验证镜像是否真正接管元数据请求
别信“我执行过了”,只看这三件事:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config -g repo.packagist,输出必须是完整 JSON,形如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};空、null、或仍是https://packagist.org都说明失败 - 执行
composer clear-cache,否则它仍从旧缓存读packages.json,镜像等于白配 - 加
-vvv看真实请求:composer install -vvv 2>&1 | grep "packages.json",应出现GET https://mirrors.aliyun.com/composer/packages.json
composer install 还卡在 Downloading https://codeload.github.com/
这不是镜像没配好,而是 composer.lock 里存的还是原始 GitHub 的 dist.url。镜像只代理元数据,不托管 ZIP 包:
-
--repository参数对已有composer.lock完全无效,它只影响元数据拉取环节 - 必须删掉
vendor/和composer.lock,再跑composer install,让 Composer 重新生成带镜像域名的dist.url - 若项目已存在
repositories字段(哪怕值是{}或{"packagist.org": false}),全局配置会被完全屏蔽 - 企业级解法:用
ghproxy.com类反向代理重写codeload.github.com请求,或部署satis缓存 ZIP
导出配置后仍慢?检查并发与缓存策略
配了镜像但下载仍卡顿,大概率是并发数太低或缓存未启用:
- Composer 2.2+ 默认只并发 3 个连接,国内带宽严重浪费:运行
composer config -g parallel-downloads 10 - 强制走压缩包而非 Git 克隆:
composer config -g prefer-dist true - 全局插件安装(如
composer global require)只读~/.composer/config.json,不读项目配置,必须单独确认该路径下镜像已写入 - PHP 环境若禁用了
putenv()(见php.ini中disable_functions),composer config -g可能静默失败
最易被忽略的一点:镜像配置只是起点,composer.lock 文件一旦生成,就锁死了所有 dist URL;不清理它,换再快的镜像也无济于事。










