镜像源配置需同时设置 type 和 url,否则静默回退至 packagist.org;配置后必须执行 composer clear-cache 和 composer clear-config-cache;resolving dependencies 卡住是 sat 求解器穷举版本组合所致,非网络问题。

镜像源配对生效,单设 URL 会静默 fallback
执行 composer config -g repos.packagist 后仍卡在 packagist.org,大概率是只设了 URL 没配 type,或者键名拼错。Composer 2.x 要求必须同时设置 repos.packagist.type 和 repos.packagist.url,缺一不可,否则自动降级回官方源,且不报错。
正确操作分两步:
composer config -g repos.packagist.type composercomposer config -g repos.packagist.url https://mirrors.aliyun.com/composer/
验证是否生效:composer config -g repos.packagist 输出应为完整 JSON,含 "type": "composer" 和 "url": "https://mirrors.aliyun.com/composer/";若为空或含 packagist.org,说明配置未落盘或被覆盖。
缓存不清理,旧元数据继续走海外源
设完镜像后立刻执行 composer clear-cache 是硬性要求——否则本地缓存的 packages.json 仍指向旧源,composer update 会复用它,根本不会发请求到新镜像站。
但注意:clear-cache 不是万能解药:
- 它只清
~/.composer/cache/下的 ZIP 包和元数据,对 DNS、PHP 扩展异常、权限问题完全无效 - 真正需要清缓存的场景:出现
Invalid signature、中断后残留不完整 ZIP、切换镜像后元数据冲突 - 如果清完缓存仍卡在同一包,瓶颈不在缓存,而在依赖求解或网络连通性
顺手加一句:composer clear-config-cache,尤其改过全局 config 后,避免配置未热更新。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
update 卡在 “Resolving dependencies”?不是网络,是 SAT 求解器在穷举
看到日志停在 Resolving dependencies through SAT,基本可以确定问题与下载无关,而是 Composer 在本地暴力尝试所有版本组合。约束越宽,耗时越指数增长:
-
"php": ">=7.4"→ 需校验几百个包对 PHP 7.4–8.3 的全部兼容性 -
"monolog/monolog": "^2.0 || ^3.0"→ 求解器要遍历所有 2.x + 3.x 组合 -
"minimum-stability": "dev"→ 候选版本暴增,稳定版约束能砍掉 80% 求解时间
实操建议:
- 精准更新:
composer update monolog/monolog,而非全量update - 收紧约束:把
"php": ">=7.4"改成"php": "^8.1" - CI/CD 中禁用
update,坚持用composer install --no-interaction
classmap-authoritative 开启后 update 变慢,纯属本地 I/O 拖累
Composer 2.x+ 默认开启 classmap-authoritative 模式,每次 update 都强制重扫整个 vendor/ 目录生成类映射——哪怕只更新一个包,也要遍历几万个文件。这不是网络慢,是磁盘读写 + PHP 解析拖垮的。
关掉它最直接:
-
composer config authorative false(注意拼写是authorative,不是authoritative) - 删掉
composer.json中的"optimize-autoloader": true - 如需优化 autoload,改用
composer dump-autoload --optimize手动触发
parallel-downloads 对 update 几乎无效,它只加速 install 阶段的 dist 包下载;而依赖图计算本身是串行的,再高的并发数也帮不上忙。










