根本原因是composer global require不读项目配置,只依赖全局配置和环境变量,若~/.composer/config.json中镜像未正确写入、代理未启用或未清缓存,则仍直连packagist.org导致超时;必须执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/、composer config -g parallel-downloads 10、composer config -g prefer-dist true并composer clear-cache验证生效。

全局插件(如 hirak/prestissimo、composer/composer-require-checker)安装慢,根本原因不是插件本身大,而是 Composer 默认仍直连 packagist.org 拉取元数据和 ZIP 包——哪怕你已为项目配了镜像,全局插件安装不走项目级配置,必须单独确保全局镜像生效。
为什么 composer global require 还是卡在 downloading
全局插件安装走的是 Composer 的全局上下文,它完全忽略当前项目目录下的 composer.json 和 composer.lock,只认全局配置(~/.composer/config.json)和环境变量。常见失效场景:
- 执行过
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,但没验证是否真写进去了——漏掉中间的composertype 参数,或 URL 少了末尾斜杠,命令静默失败 - 你在终端用
sudo执行的全局配置,实际写到了/root/.composer/config.json,但composer global require是以当前用户身份运行,读的是$HOME/.composer/config.json - PHP 环境禁用了
putenv()(见php.ini中disable_functions),导致composer config -g写配置时失败,但不报错
确认全局镜像是否真正生效
别只信 composer config -g repo.packagist 的输出,要实测请求路径:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先清缓存:
composer clear-cache,否则旧的packages.json元数据还在本地,根本不发网络请求 - 执行:
composer global require monolog/monolog -vvv 2>&1 | grep "Downloading\|packages.json" - 如果看到
Downloading https://mirrors.aliyun.com/composer/packages.json,说明镜像已生效;若仍是https://packagist.org/packages.json,说明配置没落地
composer global require 必须搭配的加速参数
仅设镜像还不够,全局安装默认不开并发、不强制 dist、不跳过 dev 包,这些都得手动开:
- 启用并行下载(Composer 2.2+):
composer config -g parallel-downloads 10,设太高(如 20)在 CI 或低配机器上易触发临时文件竞争错误 - 强制 dist 模式:
composer config -g prefer-dist true,避免 fallback 到慢速 git clone - 安装时加参数:
composer global require --no-dev --prefer-dist --no-autoloader --no-scripts hirak/prestissimo,跳过无用步骤 - 检查是否误启了
"prefer-source": true:运行composer global config --list | grep prefer,若有输出且值为true,需执行composer global config prefer-source false
CI/CD 或多用户环境下的特殊处理
在 GitHub Actions、GitLab CI 或宝塔计划任务里,composer global require 很可能跑在非交互用户下(如 runner、www),全局配置必须落到对应用户的家目录:
- GitHub Actions 示例:
run: | composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ composer config -g parallel-downloads 10 composer config -g prefer-dist true composer clear-cache composer global require --no-dev --prefer-dist --no-autoloader --no-scripts hirak/prestissimo - 宝塔中若用「计划任务」执行全局安装,先查清执行用户(通常为
www),再用sudo -u www composer config -g ...配置 - Docker 构建时,确保
USER指令指定的用户与composer config -g所用用户一致,否则配置写到 root 目录却以普通用户运行,直接失效
最容易被忽略的是:全局插件安装一旦失败,Composer 不会自动重试镜像备用源,也不会 fallback 到其他镜像地址——它要么走你配的 repo.packagist,要么彻底失败。所以 URL 拼写、末尾斜杠、type 参数这三处,一个都不能错。










