必须在项目开始前配置国内镜像源,因为composer install首步需拉取packagist.org的packages.json,而该站在国内dns解析慢、tls握手超时、tcp连接易中断,导致卡死而非单纯变慢;若未提前配置,后续生成composer.lock后换源无效,且ci/cd、docker等环境因用户权限差异无法读取全局配置,必须通过项目级repositories字段确保一致生效。

因为不配,composer install 很可能根本跑不完——不是慢,是卡死、超时、TLS 握手失败或无限挂起在 Loading composer repositories。
为什么项目开始前就必须配,而不是等报错再补?
Composer 依赖解析的第一步是拉取 packages.json,这个文件来自 packagist.org。国内家用宽带、校园网、云服务器(尤其阿里云/腾讯云轻量)访问它时,DNS 解析常返回错误 IP,TLS 握手动辄 2–5 秒,首字节延迟高到触发默认重试上限。结果就是:命令没报错,光标不动,新手以为自己装错了 PHP。
-
composer install卡住 ≠ 网络差,而是元数据根本没加载成功 - 一旦
composer.lock生成(哪怕只含一个包),后续所有操作都基于它——此时再配镜像也无效,必须删 lock 和 vendor - CI/CD(如 GitHub Actions)、宝塔面板、Docker 构建全按项目级行为执行,你本地没配,流水线里照样卡
全局配置 composer config -g repo.packagist 为什么靠不住?
它写进的是当前用户的 ~/.composer/config.json,而 CI/CD 流水线、宝塔的 www 用户、Docker 容器里的非 root 用户根本读不到。你以为配好了,其实 composer install 还在默默连 packagist.org。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 键名必须是
repo.packagist(单数,不能是repos.packagist) - 第二参数必须显式写
composer(不是注释,漏了就静默 fallback) - URL 必须是
https://mirrors.aliyun.com/composer/(末尾斜杠不能少,少一个就 404 或回退官方源) - 验证是否真生效?只看
composer config -g repo.packagist输出——必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
项目级配置才是真实落地的最小单元
把镜像源写进 composer.json 的 repositories 字段,Git 提交后,谁拉代码、在哪跑,都走同一套源。没有权限差异,没有环境盲区。
- 进项目根目录,运行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意:不加-g) - 该命令会在
composer.json顶层自动写入"repositories"对象,key 固定为"packagist" - 如果已有
"repositories": [](数组),命令会失败;需先手动改为"repositories": {}再重试 - 哪怕只写
"repositories": {},也会禁用默认源——这是 Composer 设计逻辑,不是 bug
换源后 composer install 还报 hash 不匹配?
这不是网络问题,是旧 composer.lock 里记录的 dist URL 和哈希仍指向官方源。镜像服务的内部路径映射和 packagist.org 不同,校验必然失败。
- 删掉
vendor/目录 - 删掉
composer.lock文件 - 再执行
composer install(不是update)——让 Composer 重新解析、生成适配新镜像的 lock - 顺手加
-vvv,确认日志里出现mirrors.aliyun.com,而不是packagist.org
最易被忽略的一点:镜像只加速元数据和 ZIP 包下载,不参与依赖解析。如果你发现 composer update 卡在 Resolving dependencies,那和镜像无关,得查 composer.json 里的 PHP 版本约束、require 写法或平台配置。










