卡在“resolving dependencies”不是内存问题,而是尚未拉取packages.json,需先验证dns、tls及镜像url有效性;运行composer install -vvv | grep "downloading.*json"确认是否进入元数据加载阶段。

composer install卡在“Resolving dependencies”不是内存问题
这一步根本没开始解析任何 JSON,更不涉及 json_decode 或反序列化——它卡在 DNS 解析、TLS 握手失败,或压根没拿到 packages.json。常见现象是命令长时间无日志输出,或反复报 cURL error 28: Operation timed out、Connection refused。
验证是否真走到元数据加载阶段:composer install -vvv 2>&1 | grep "Downloading.*.json"。若没任何匹配输出,说明连第一份索引都没拉下来,别查 PHP 内存限制,先看网络链路。
- 检查镜像 URL 是否以
https://开头(http://会被静默拦截) - 运行
curl -I https://mirrors.aliyun.com/composer/packages.json,确认返回HTTP/2 200和Content-Type: application/json - 若返回 404、空内容或 HTML 页面,说明镜像站尚未同步该文件,不是你本地的问题
metadata 文件损坏或截断导致 json_decode 失败
真正触发 json_decode 的环节,是 Composer 下载完 p2/vendor/package.json 后尝试解析。此时若镜像返回了乱码、HTML 错误页、或被 CDN 截断的 JSON,就会反复重试 + 内存持续增长,最终报 Fatal error: Allowed memory size exhausted,堆栈里含 Composer\Util\JsonFile::parse。
别信 composer config -g repo.packagist 的输出,直接抓包验证实际响应:
-
curl -sSL "https://mirrors.aliyun.com/composer/p2/laravel/framework.json" | head -n 5—— 应看到{"packages":{开头,而非 - 若内容异常,临时切回官方源:
composer config --global repo.packagist composer https://packagist.org - CI/CD 中建议用
COMPOSER_CACHE_DIR=$(mktemp -d)隔离缓存,避免脏快照跨构建污染
元数据缓存过期却仍被复用,update 显示 “nothing to install”
Composer 默认复用 ~/.composer/cache/repo/https---mirrors-aliyun-com-composer/packages.json,15 分钟内绝不重拉——哪怕镜像站已同步 v3.6.0,本地仍按 v3.5.0 算依赖,结果就是 composer update monolog/monolog 什么也不做。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer clear-cache 对此无效,它只清 ZIP 包缓存,不碰这个关键快照。正确做法是:
- Composer ≥ 2.5:执行
composer update --refresh,精准删除repo/下所有packages.json和provider-*.json,强制重拉 - Composer ≤ 2.4:手动删对应目录,例如
rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer - 删完后立刻跑
composer update --dry-run -v,看到Downloading https://...行才算生效
项目级 repositories 配置会完全屏蔽全局镜像
最隐蔽的失效原因:你在 composer.json 里写了 "repositories": [] 或残留了已停用的旧镜像地址(如 https://packagist.phpcomposer.com)。这会让 Composer 忽略全局配置,静默 fallback 到官方源,导致同一份 composer.lock 在不同机器上行为不一致。
排查方法:
-
composer config --list | grep repositories.packagist.url—— 看实际生效的 URL 是什么 -
composer config --list | grep repositories—— 若有输出,说明项目级配置覆盖了全局 - 检查
composer.json是否含"repositories"字段;若有,删掉或明确设为有效 HTTPS 镜像
真正容易被忽略的是:删完缓存后,第一次 composer update 必须成功拿到 packages.json,否则后续所有操作都基于一个空或损坏的元数据快照继续错下去。










