Composer install卡在Downloading是因为镜像未生效:repo.packagist键名不能多s、第二参数必须显式写composer、URL须HTTPS且末尾带/,三者缺一即静默回退官方源;验证需运行composer config -g repo.packagist输出完整JSON或带斜杠URL。

配了国内镜像源,composer install 还卡在 Downloading...?大概率不是网络问题,而是镜像根本没走成——Composer 会静默 fallback 到官方源,连错误都不报。
为什么 composer config -g repo.packagist 总是不生效
这条命令看似简单,但三个硬性条件漏掉任何一个,就等于没配:
-
repo.packagist键名不能多写一个s(repos.packagist是无效字段,完全被忽略) - 第二个参数必须显式写
composer,这是仓库类型声明,缺了它 Composer 2.x 直接回退到packagist.org - URL 必须以
https://开头,且末尾带斜杠:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(少斜杠会导致路径拼接出错,返回 404)
验证是否真写进去了:运行 composer config -g repo.packagist。输出必须是完整 JSON 对象(如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"})或至少是那个带斜杠的 URL 字符串。如果为空、null、或还是 https://packagist.org,说明压根没写成功。
项目级配置比全局更可靠,尤其在 CI/CD 和团队协作中
全局配置依赖用户环境,而项目级配置直接写进 composer.json,拉代码即生效,行为一致:
立即学习“PHP免费学习笔记(深入)”;
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 进入项目根目录,执行
composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/(不加-g) - 该命令会自动向
composer.json的repositories字段追加一条"packagist"条目,不会覆盖已有私有源 - 如果
repositories原本是空对象{},命令会转为标准数组格式并插入;如果是数组[],则追加到末尾 - 千万别手动写
"packagist.org": false—— 这会导致基础扩展(如ext-json)校验失败
改完后建议跑一次 composer update --lock,确保 composer.lock 记录的是新镜像地址。
宝塔、Docker、CI 脚本里镜像为啥还是不生效
全局配置 composer config -g 写的是当前用户的 ~/.composer/config.json,但实际执行用户往往不是你本人:
- 宝塔默认用
www用户运行,得切过去配:sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - CI 流水线常用
runner或git用户,别依赖全局配置,改用临时参数:composer install -vvv --repository-url=https://mirrors.aliyun.com/composer/ - Docker 容器里可能是
www-data或自定义用户,docker exec -u www-data进去验证配置才靠谱
换源后第一次运行 composer install 出现 hash does not match 或 package is not installed?直接删掉 vendor/ 和 composer.lock,再重装。旧 lock 文件记录的是官方源的哈希,和镜像返回的元数据不兼容。
镜像只解决下载慢,不解决依赖解析阶段的卡顿;真正要提速,还得配合 --prefer-dist、缓存目录优化、类映射生成等手段。但第一步,必须确保镜像真的在用——否则后面所有优化都是白忙。


















