必须同步清理三处:先composer clear-cache,再删~/.composer/cache/repo/https---packagist.org/、vendor/composer/installed.json和composer.lock;否则update仍复用旧元数据与版本锁定。

composer update后依赖没变?缓存清理只是第一步
清完缓存(composer clear-cache)不代表依赖就会更新——Composer 仍会优先复用 composer.lock 里的版本,除非你明确让它重算。很多人误以为“清了缓存=重来”,结果 composer update 还是装旧包。
-
composer update默认忽略composer.lock,但只重算顶层require,间接依赖(如monolog/monolog被laravel/framework引入)仍被锁死 - 想让所有依赖(包括传递依赖)都适配当前 PHP 版本和约束,必须加
--with-all-dependencies - 如果
composer.json里写了"php": "^8.2",但你刚从 8.1 升级上来,不加这个参数,Composer 仍可能沿用为 8.1 解出的旧版本
为什么加 --no-cache 有时比清缓存还管用
--no-cache 不是清理动作,而是运行时开关:它禁用本次所有缓存查找,强制每个包都走网络下载+校验流程。这对修复“看似更新了、实际 vendor 里文件还是旧的”特别有效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 常见于 CI 环境或 Docker 构建中:缓存目录被挂载、权限混乱,
clear-cache没删干净,但--no-cache绕过了整个缓存路径 - 搭配
--prefer-dist可避免 git clone 开销,尤其对含大量子模块的包(如某些前端 asset 包)提速明显 - 注意:
--no-cache不影响composer.lock的读取逻辑,它只关掉包内容缓存,不是“跳过 lock 文件”
删 vendor + 删 lock 才算真正重来
仅删 vendor/ 目录,composer install 仍会照着 composer.lock 复原;仅删 composer.lock,composer install 会报错。真要从头开始,顺序不能错。
- 先删
composer.lock:rm composer.lock(Linux/macOS)或del composer.lock(Windows) - 再删
vendor/:确保没有残留符号链接或权限异常文件 - 最后跑
composer install --no-cache --prefer-dist --optimize-autoloader—— 此时 Composer 才会按composer.json全量解析、下载、锁定
PHP 版本升级后最易忽略的一步
升级 PHP 后,composer update --with-all-dependencies 必须配合 composer clear-cache,否则 Composer 可能复用旧的平台兼容性检查结果(比如仍认为 ext-mcrypt 可用),导致装上不兼容包。
- 执行前先确认:
php -v和php -m | grep mbstring,缺扩展会导致后续安装直接中断 - 别用
--ignore-platform-reqs临时绕过——它跳过所有php和扩展约束,后期运行时报Call to undefined function更难定位 - 如果项目用了自定义 autoloader 或 PSR-4 映射,重装后记得补一句
composer dump-autoload -o,否则类找不到不是包没装对,是映射没刷










