强制重拉包需先删除 vendor 目录,再执行 composer clear-cache 清空本地缓存,最后运行 composer install 或 update;换源应配置为 https://mirrors.aliyun.com/composer/ 并验证生效。

Composer install 时还走旧缓存,怎么强制重拉包
Composer 默认会复用本地已有的包(尤其是 vendor/ 下已解压的代码和 ~/.composer/cache/ 里的 zip),哪怕 composer.json 里改了版本或源地址,它也可能跳过网络请求直接“假装更新”。这不是 bug,是设计使然——但你真想重来一遍,就得打断它的惯性。
最直接有效的方式是两步清空:
- 删掉
vendor/目录(别只删部分子目录,整删) - 运行
composer clear-cache(它会清掉~/.composer/cache/下所有 zip、dist 和 metadata 缓存)
之后再跑 composer install 或 composer update,就真从头走了。注意:composer update 本身不自动清缓存,也不强制重下 dist;只有加 --no-cache 才跳过本地 zip 缓存(但不会清 cache 目录)。
packagist.org 链接失效、404 或 timeout 怎么切源
国内直连 packagist.org 经常卡在 https://packagist.org/packages.json 或具体 zip 下载环节,错误现象包括:file could not be downloaded: failed to open stream: Connection refused、curl error 28: Operation timed out,甚至 Package xxx not found(其实包存在,只是元数据没拉下来)。
解决核心是换镜像源,不是修网络——Composer 支持全局或项目级配置镜像:
- 全局生效(推荐):运行
composer config -g repo.packagist composer https://packagist.phpcomposer.com(阿里系已停,改用https://mirrors.aliyun.com/composer/或https://packagist.laravel-china.org) - 项目级覆盖:进项目根目录,执行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/,会写入当前项目的composer.json的repositories字段
验证是否生效:运行 composer config repo.packagist,输出应为镜像地址;再试 composer clear-cache && composer install,看是否秒出结果。
composer.lock 文件锁死旧版本,导致 install 不生效
composer.lock 是真实安装依据,只要它存在且没变,composer install 就严格按它装,哪怕 composer.json 里版本放宽了也无效。很多人改完 composer.json 发现没用,就是卡在这儿。
常见误操作是只改 composer.json,却不碰 lock 文件:
- 想按新
composer.json重新解析依赖?用composer update(它会重算并覆盖lock) - 只想清 lock 重来?删掉
composer.lock再跑composer install(这时它会按composer.json生成新 lock) - 误删了
lock又想回退?别硬凑,从 git 恢复原composer.lock最稳
注意:composer update xxx 只更新指定包及其子依赖,不会动其他项;而 composer update 全量更新,可能引入意外变更。
为什么 clear-cache 后还是连不上镜像源
composer clear-cache 只清本地文件,不重置源配置。如果之前配过私有源、自定义 repo 或错误的镜像地址,缓存清了,请求照样发去错地方。
排查顺序很关键:
- 先看源配置:
composer config -l | grep repo,确认repo.packagist是期望的镜像地址 - 再查是否有项目级覆盖:
composer config repo.packagist(不加-g)在项目里运行,看是否被覆盖 - 最后检查是否用了
http-proxy或https-proxy配置(composer config -g http-proxy),代理设错也会全程静默失败
镜像源地址末尾带不带 / 一般不影响,但协议必须是 https(多数镜像已不支持 http);另外某些企业网络会拦截 composer 域名,这时候换镜像源才是正解,而不是反复清缓存。










