composer install卡在“loading composer repositories”是因默认源packagist.org在国内dns解析慢、tls握手不稳定且无cdn,导致元数据请求持续性失败;必须执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/并清缓存。

不配国内镜像,composer install 卡在 Loading composer repositories 是常态,不是网络问题,是默认源根本连不上。
为什么 composer install 总卡在“Loading composer repositories”
这不是你本地网速慢,而是 Composer 默认从 packagist.org 拉取元数据——这个域名在国内 DNS 解析慢、TLS 握手不稳定、缺乏 CDN 节点。实测未换源时,该阶段常卡 5 分钟以上,且无报错,只停在那不动。
镜像不是“加速下载 ZIP 包”,而是替换整套元数据接口 + 包分发节点;两者必须匹配,否则会报 Package not found 或 Signature mismatch。
-
packagist.org的原始地址已基本不可用,不是偶尔超时,是持续性连接失败 - 清华、阿里、华为、中科大等镜像同步延迟通常 ≤5 分钟,全量同步,生产可用
- 过时镜像如
https://packagist.phpcomposer.com已于 2023 年下线,勿再使用
composer config -g repo.packagist 必须执行且写法严格
这是最稳妥的全局换源方式,命令本身不依赖 PHP 版本或环境变量,但参数格式容错极低。
正确写法(以阿里云为例):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
关键点:
-
repo.packagist是固定键名,不能写成packagist.org或repos.packagist -
composer是 type 字段,不能省略 - URL 末尾必须带
/,否则部分版本会拼接出错(比如变成.../composer//packages.json) - Windows 下写入路径为
%USERPROFILE%\AppData\Roaming\Composer\config.json,含空格或中文无影响
验证是否生效:
composer config -g repo.packagist
输出应直接是 URL 字符串,不是数组;若提示 Permission denied,先修复 ~/.composer 目录权限或加 sudo(Linux/macOS)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
项目级配置要小心覆盖原有仓库
仅当需要临时测试镜像、或团队要求显式声明源时才用,写法和全局不同,且极易踩坑。
在项目 composer.json 中添加:
"repositories": [
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
]
注意:
- 不要删掉已有
repositories数组,直接追加;否则私有包仓库或自定义源会失效 - 如果已有非 packagist 官方源(如企业私有仓库),需确保它们仍在数组中,否则那些包不可见
- 项目级配置优先级高于全局,但一旦误删或格式错误,
composer install可能直接报Could not load package xxx
PHP 环境里两个禁用函数必须放开
即使镜像配对了,composer --version 或 composer install 仍可能报错,常见原因是 PHP 禁用了关键函数。
检查 php.ini 中的 disable_functions 项,确保以下两个函数未被禁用:
-
putenv:Composer 需用它临时设置环境变量(如COMPOSER_HOME) -
proc_open:用于调用外部进程(如 Git、unzip、curl),几乎所有操作都依赖它
若已被禁用,需注释掉或移除对应函数名,然后重启 Web 服务(Apache/Nginx)或 PHP-FPM 进程。
顺带一提:composer self-update 和 composer clear-cache 建议定期执行,尤其在换镜像后——缓存里还存着旧源的元数据,不清理会导致日志里明明写了镜像域名,实际却仍走海外请求。










