composer update总是全量重算,因为其依赖求解器无增量概念——每次都会丢弃composer.lock,重新校验整个依赖树及所有约束;唯一可控方式是显式指定包名,如composer update monolog/monolog。

composer update 为什么总是全量重算,不是增量更新?
因为 Composer 的依赖求解器根本没“增量”这个概念——它每次运行 composer update 都会丢掉 composer.lock,把整个依赖树连同 PHP 版本、扩展要求、冲突规则一起重新校验。哪怕你只改了一行 composer.json,它也不会比对“哪些包变了”,而是从头开始跑约束求解。
真正能控制范围的唯一方式是显式指定包名:composer update monolog/monolog。此时它只动该包及其在 composer.json 中声明的一级依赖,不碰其他分支。
-
composer update --with-dependencies:把一级依赖的直接子依赖也纳入求解,但不会递归到三级 -
composer update --with-all-dependencies:等价于全量重算,不是“更深”,而是更慢、更容易漂移 - 空参数运行
composer update:忽略 lock 文件里所有版本锁定,哪怕写死"symfony/console": "6.4.0",也会去镜像查最新匹配版
中文镜像同步滞后时,composer update 卡在 404 是什么问题?
不是网络不通,也不是你配错了源,而是镜像还没生成对应分片的 provider-*.json 文件。Composer Metadata V2 把元数据拆成 packages.json(全量索引)和大量按哈希分片的 provider-*.json,客户端会并发拉取这些 provider 文件。只要其中某一个返回 404,命令就卡住不动。
别信“15 分钟同步”宣传,得自己验证具体路径是否存在。比如你想更新 laravel/framework 10.0.0,就手动访问镜像地址:https://mirrors.aliyun.com/composer/p2/laravel/framework/10.0.0.json,看是否返回 404。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 阿里云镜像通常延迟 5–10 分钟,但小众包或凌晨时段可能滞后 1–2 小时
- 华为云保留历史版本完整,但 metadata 请求略慢(因分片存储策略)
- 腾讯云不保留已删包,
Package not found可能是原包被作者下架,而非镜像问题
为什么 composer install 几乎不联网,却报下载失败?
composer install 根本不查镜像源,它只读 composer.lock 里固化好的 dist.url 或 vcs.url,然后直连下载或克隆。所以即使你删了镜像配置,只要 lock 文件里存的是旧地址,它就照着下。
常见错误是 lock 里某个包的 dist.url 已失效(比如私有镜像下线、路径变更),而 install 完全不校验可用性,直到解压失败才报错,例如:Failed to download xxx: The "https://xxx.tgz" file could not be downloaded。
- 本地有缓存 zip 包时,甚至跳过下载,直接解压 → 更快、更静默
-
--repository-url或config.repositories对install无效,lock 文件已固化源信息 - 如果 lock 记录的是 Git URL,
install就走git clone,和镜像完全无关
怎么确认当前生效的是哪个镜像源?
运行 composer config -g repo.packagist,输出应为完整 JSON 对象,例如:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。如果返回空、null 或 https://packagist.org,说明没生效。
但要注意:项目级 composer.json 中的 repositories 字段优先级高于全局配置,会静默覆盖它,且不报错。所以即使全局配了阿里云,只要项目里写了旧的或失效的镜像定义,实际用的就是那个。
- 漏掉
-g参数,或写成repo.packagist(少个s),命令会静默失败 -
composer diagnose显示 “OK” 不代表镜像可用,它只检测语法和基础连通性,不验证元数据是否完整 - 临时切回官方源只需一行:
composer config -g repo.packagist composer https://packagist.org










