答案:报错含“ext-”或“php:”字样属平台兼容性问题,需检查PHP版本及扩展;不含则为包间版本冲突,应查依赖树与版本约束。

报错信息里有没有 ext- 或 php: 字样
有,基本是平台兼容性问题;没有,大概率是包间版本冲突。
比如出现 ext-xml * -> it is missing from your system 或 requires php >= 8.1.0,说明 Composer 在校验运行环境——PHP 版本、扩展是否就位。这类错误和插件本身逻辑无关,只和你服务器或 CLI 环境有关。
而像 Conclusion: don't install guzzlehttp/guzzle v7.8.0 或 Root composer.json requires laravel/framework ^10.0 这类输出,全是包名+版本号+动词,没提任何 PHP 或扩展,就是依赖树解不开,属于纯版本错配。
- 前者查
php -v和php --ini,再比对info.php里的 Web 环境 - 后者直接上
composer why-not vendor/package:version,别猜 - 同一行报多个
don't install?看最后一行,那是你composer.json里写的原始声明
composer show --tree 能不能展开出目标包
能,说明它已被解析进依赖树,只是版本被锁或被替代;不能,说明它根本没进树——大概率是你写错了包名、版本格式,或者镜像源没同步到这个 tag。
例如你想装 topthink/think-orm:^3.0,但 composer show --tree topthink/think-orm 没反应,先跑 composer show -a topthink/think-orm 看实际有哪些可用版本。常见坑:写了 ^3.0.0,但官方只发了 v3.0.0-rc1,没打 stable tag,就得加 --stability=rc 或调 "minimum-stability"。
- 镜像 URL 末尾少斜杠(
https://mirrors.aliyun.com/composer❌)会导致回退到 packagist.org,延迟或缺失新包 - 项目级
repositories配置会屏蔽全局镜像,哪怕你config -g也没用 -
composer.lock里标着(replaced)?去那个“替代者”的composer.json里查它到底替了谁、有没有真覆盖
执行 composer update --dry-run 后有没有 “Lock file operations”
有,说明 Composer 认为能解,只是还没写入;没有,说明连初步可行性都没通过,直接卡在约束矛盾上。
--dry-run 是最轻量的验证方式。它不改 vendor/、不写 composer.lock,但会完整走一遍 SAT 求解流程。如果输出里连 “Lock file operations” 都没出现,而是直接甩一堆 don't install,那就不是缓存或网络问题,是约束写死了无解。
- 加
-v(verbose)能看到更细的拒绝路径,比报错原文直观得多 - 如果
--dry-run成功,但真实update失败,大概率是权限、磁盘空间或post-update-cmd钩子里的脚本崩了 - 别用
--ignore-platform-reqs掩盖问题——它只是关掉校验,不解决运行时崩溃
更新后页面白屏或 Class not found,先看 vendor/autoload.php 是否生效
ThinkPHP 8 升级后白屏,90% 是因为 dump-autoload -o 没跑,或者入口文件仍引用旧路径。
TP6 的 application/ 目录在 TP8 已废弃,public/index.php 必须重写为 (new \think\App())->run()->send();。如果还沿用老写法,框架压根没启动,自然找不到 think\App 类。
- 删掉
runtime/目录再试,避免旧缓存干扰 - 确认
config/下全是扁平文件,没有config/database/mysql.php这种嵌套——TP8 不认 - 所有 Facade 类(如
Db::)加载失败?先composer dump-autoload -o,再检查composer.json里autoload配置是否指向新app/目录
复杂点在于:同一个报错现象,可能横跨环境、依赖、框架三层面。比如 Class not found,可能是 PHP 扩展没开(ext-simplexml),也可能是 think-orm 版本没对上 TP8,还可能是 autoload 映射漏了新命名空间——得一层层剥,不能只盯着插件名或 Composer 命令本身。











