Composer无法连接Packagist是DNS污染与TLS阻塞导致的刚性不可达,换镜像为必须动作;config -g repo.packagist需严格满足键名、type值、URL末尾斜杠及-g参数四条件,缺一即静默回退官方源。

卡在 Loading composer repositories 不是网络断了,而是默认源 packagist.org 在国内根本连不上——换镜像不是“试试看”,是必须立刻执行的止损动作。
为什么 composer config -g repo.packagist 总是不生效
这条命令写错任意一处,Composer 就静默回退到官方源,连错误都不报:
-
repo.packagist拼成repos.packagist(多一个 s)→ 写进无效字段,composer config -g repo.packagist输出为空 - 漏掉第二个参数
composer→ 配置被忽略,实际仍走https://packagist.org - URL 少了结尾斜杠:
https://mirrors.aliyun.com/composer❌ 会拼成/packages.json导致 404;必须是https://mirrors.aliyun.com/composer/✅ - 没加
-g→ 只改当前项目composer.json,换目录就失效
验证是否成功:运行 composer config -g repo.packagist,输出必须是类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的完整 JSON。
composer install 卡住时,clear-cache 为什么不管用
缓存分两层,只清一层等于白清:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer clear-cache只删 ZIP 包和部分 JSON,但packages.json默认缓存 15 分钟,下次仍读旧元数据 -
composer.lock里每个包的dist.url是硬编码绝对路径,不会随镜像配置自动更新 - 旧
vendor/目录残留可能触发冲突校验,尤其当 lock 文件版本与镜像元数据不一致时
正确做法:先 composer clear-cache,再删掉项目根目录下的 composer.lock 和 vendor/,然后重跑 composer install。
CI/宝塔/WSL2 里镜像还是不走?用户级配置被覆盖了
你在终端用 root 执行了 composer config -g,但 CI 脚本、宝塔后台、systemd 服务通常以 www、git 或其他用户身份运行,它们读的是各自家目录下的 ~/.composer/config.json:
- 查当前生效路径:
composer config --global home - 确认目标用户(如
www-data)的~/.composer/config.json是否包含正确的repo.packagist配置 - WSL2 常见陷阱:系统时间不同步会导致 TLS 握手卡在
* TLS handshake,运行sudo hwclock -s同步主机时间 - 宝塔面板里 PHP 环境变量可能屏蔽
COMPOSER_HOME,需在脚本开头显式设置export COMPOSER_HOME=/home/www/.composer
镜像源本身已失效或同步延迟怎么办
别信网页能打开,直接查元数据接口:
- 测试阿里云镜像是否响应:
curl -I https://mirrors.aliyun.com/composer/packages.json,应返回HTTP/2 200 - 查你要装的包是否同步:
curl -s https://mirrors.aliyun.com/composer/p2/monolog/monolog.json | jq -r '.packages."monolog/monolog" | keys[]' | tail -1,对比官网输出 - 若镜像缺最新版,阿里云/腾讯云通常 5–30 分钟同步,等不及就换源,比如
https://packagist.proxy.tencent.com/ - 强制刷新元数据缓存(比
clear-cache更精准):composer update --refresh(Composer ≥ 2.5)
真正卡住的地方,往往不是命令没输对,而是你改了全局配置,却忘了项目 composer.json 里有个空的 "repositories": [] ——它会直接屏蔽所有全局镜像。

















