镜像源配置不生效主因是命令错误导致composer静默回退至packagist.org;需严格满足四条件:repo.packagist单数、第二参数为"composer"、url须https且末尾带/、必须加-g;验证需输出完整json;换源后须清缓存、composer.lock及vendor并重装。

镜像源配置不生效,90% 是命令写错且 Composer 静默回退到 packagist.org —— 它连错误都不报,只卡在 Loading composer repositories。
composer config -g repo.packagist 为什么总没反应
这条命令必须同时满足四个硬性条件,缺一即失效:
-
repo.packagist必须是单数,写成repos.packagist或packagist.org都无效 - 第二个参数
composer是 type 值,不是可选注释,漏掉就 fallback 到官方源 - URL 必须是 HTTPS 且末尾带
/,例如https://mirrors.aliyun.com/composer/✅,少斜杠会拼出/packages.json导致 404 - 必须加
-g参数,否则只改当前项目composer.json,换目录就失效
验证是否真写入:运行 composer config -g repo.packagist,输出必须是完整 JSON,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、报 Key not found,或只返回字符串(如 "https://packagist.org"),都说明没配成功。
换源后 still loading?缓存和 lock 文件得一起清
Composer 的缓存分三层,只清一层等于白清:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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 -vvv,观察日志是否出现 mirrors.aliyun.com 或 mirrors.tuna.tsinghua.edu.cn。
CI/宝塔/WSL2 里镜像不走?用户级配置被覆盖了
你在终端用 root 执行了 composer config -g,但 CI 脚本、宝塔后台、systemd 服务通常以 www-data、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
镜像本身响应慢或失效?别信网页能打开
网页能打开不代表 Composer 元数据接口可用。直接测真实路径:
- 测试阿里云镜像:
curl -I https://mirrors.aliyun.com/composer/packages.json,看是否返回200 OK - 测清华源是否启用 HTTP/2:
curl -I --http2 https://mirrors.tuna.tsinghua.edu.cn/composer/,返回HTTP/2 200才算真启用 - 用
curl -o /dev/null -s -w "%{time_starttransfer}\n" https://mirrors.aliyun.com/composer/packages.json测三次取中位数,超 1.5 秒的镜像别用 - 日志里若出现
302 Found,大概率是旧镜像(如 PHPComponer)已停服,重定向吃掉 300ms+
真正卡住的地方,往往不在你看到的那行日志里——它可能卡在 DNS 解析、TLS 复用失败、或镜像后端限流,而这些环节 Composer 不会主动告诉你。










