composer 不会自动检测本地包是否过期,所谓“强制刷新缓存”本质是绕过本地 vendor 和 composer.lock 的信任机制,让依赖重新解析、下载、安装。

Composer 不会自动检测本地包是否过期,所谓“强制刷新缓存”本质是绕过本地 vendor 和 composer.lock 的信任机制,让依赖重新解析、下载、安装。
为什么 composer update 有时不生效
常见现象:composer update 后版本没变、旧代码还在运行、vendor 里文件没更新。根本原因不是缓存“卡住”,而是 Composer 默认复用 composer.lock 中锁定的版本和哈希值,只要它存在且没被改,就不会拉新包。
-
composer.lock是权威来源,composer install完全按它来,update也只在它允许范围内变动 - 本地
vendor/被手动改过,但lock文件没同步更新 → Composer 认为“一切正常” - packagist.org 镜像或本地 cache(
~/.composer/cache)里存了旧的 dist zip 或 metadata → 可能跳过远程校验
composer update --refresh 并不存在
别搜这个命令——Composer 没有 --refresh 参数,官方文档和源码里都找不到。网上很多教程写的这个参数,实际执行会报错:Unrecognized option: --refresh。
- 真正起效的是组合动作:删锁文件 + 清缓存 + 强制重装
- 想“重下载所有包”,核心是让 Composer 放弃
composer.lock的约束,回到“从composer.json重新推导依赖图”的状态 - 单纯
composer clear-cache只清元数据和 zip 包缓存,不影响vendor和lock,对“更新失败”基本无效
真正有效的三步操作
适用于:确定要彻底重装依赖,比如 CI 构建、修复因手动修改 vendor 导致的不一致、或怀疑本地包损坏。
- 删掉
composer.lock:rm composer.lock(Windows 用del composer.lock) - 清 Composer 全局缓存:
composer clear-cache(它会告诉你清理了哪些路径,如~/.composer/cache/files) - 重新生成依赖:
composer install(此时无lock,等价于先update再install;如果要指定版本策略,可加--with-all-dependencies)
注意:composer install 在没有 lock 时会自动触发依赖解析,比 composer update 更彻底——后者仍受旧 lock 中版本约束影响。
更激进但有时必须的方案:删 vendor + 强制重装
当 vendor 里混入了非 Composer 管理的文件、符号链接、或权限错乱导致安装失败时,光清缓存没用。
- 删整个
vendor目录:rm -rf vendor(Windows:rmdir /s vendor) - 确认
composer.lock已删或已更新(否则install还是按旧 lock 装) - 运行
composer install --no-cache:跳过本地 dist 缓存,直接从 packagist 下载压缩包,避免镜像或本地缓存污染 - 如遇网络问题或国内访问慢,可临时切源:
composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意该镜像已停用,建议用https://mirrors.aliyun.com/composer/)
这一步代价高(耗时、占带宽),但它是唯一能 100% 确保 vendor 与当前 composer.json 严格一致的方式。很多人漏掉删 vendor,结果 install 时 Composer 复用了旧目录结构,看似重装,实则只是“补漏”。










