答案是删vendor和composer.lock后切回官方源重装;根本原因是镜像源返回的包与官方不一致,需临时验证用composer install --no-cache && COMPOSER_REPO_PACKAGES=https://repo.packagist.org composer install。

composer install 报 checksum mismatch 怎么办
这是中文镜像源返回的包和官方不一致导致的,不是你本地文件损坏。报错类似 Package checksum mismatch for vendor/some/package: expected xxx, got yyy,说明镜像缓存了被篡改或过期的 zip 包。
别删 vendor 或 composer.lock——那只会复现错误。临时验证一致性,直接运行:
-
composer install --no-cache(跳过本地缓存) -
COMPOSER_REPO_PACKAGES=https://repo.packagist.org composer install(强制走官方源)
检查当前镜像配置:composer config -g repo.packagist。如果输出是 {"url": "https://packagist.phpcomposer.com"} 这类非官方地址,说明全局被替换了,得手动切回:composer config -g repo.packagist https://repo.packagist.org。
composer install 卡住或失败但 vendor 已存在
常见于 autoload 损坏、post-install-cmd 未执行、符号链接断裂,或某些文件被 IDE/PHP 进程占用。此时删 vendor 是低效且易出错的。
优先用 composer install --force-reinstall:它不删目录、不动 composer.lock,但会强制重解压每个包、覆盖文件、重建 vendor/autoload.php、重跑所有安装脚本。
加参数提升成功率:
-
--no-dev:跳过开发依赖,减少干扰 -
--prefer-dist:避免 Git 克隆,改用压缩包,Windows 下更稳 -
--with-all-dependencies:确保间接依赖也被覆盖(比如被其他包 require 的子包)
Windows 用户务必先关掉 PhpStorm/Xdebug/Swoole 等可能锁定文件的服务,否则会报 Could not delete 或 Permission denied。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
报 “don’t install xxx” 但没删 lock 文件
这不是网络或权限问题,而是依赖图解析失败。Composer 严格按 composer.lock 还原,但该 lock 文件本身已无法在当前 PHP 环境或扩展下满足——比如 lock 里记着需要 ext-gd,而你系统没装。
先运行 composer check-platform-reqs,看是否缺扩展(如 gd、mbstring、zip)。再查 PHP 版本:php -v 是否匹配 composer.json 里的 "platform": {"php": "..."} 声明。
若平台合规但依然失败,说明 lock 文件和当前环境“语义不兼容”。此时不能只靠 install,得先同步 lock:composer update --lock,让 Composer 用当前环境重算一次依赖快照,再 install。
为什么 composer install 总是飞快、没下载、文件时间戳不变
因为 composer install 的本质是“复原”,不是“安装”。只要 composer.lock 存在,它就从 ~/.composer/cache/ 解压已有 zip,根本不会发网络请求。
所以即使你改了 composer.json 里的版本号,install 也完全无视——它只认 lock。想让改动生效,必须让 lock 和 json 对齐:
- 改完
composer.json后,运行composer update --lock(仅更新 lock,不碰 vendor) - 或指定包更新:
composer update monolog/monolog --with-dependencies - 绝不要写
composer update "monolog/monolog:^3"——引号 +^会让 Composer 自行选版本,不是你要的精确值
真正容易被忽略的是:lock 文件不是“静态快照”,而是带平台上下文的产物。同一份 lock,在 PHP 8.2 和 8.3 下可能还原出不同结果,甚至失败。每次换 PHP 版本,都得重新生成 lock。

















