composer require是唯一安全的选择,因为它精准写入composer.json的require段并更新composer.lock,而install不装新包,update会重算依赖图、可能意外升级ThinkPHP核心导致崩坏。

必须用 composer require,不是 composer install 或 composer update。其他命令要么不装新包,要么可能意外升级 ThinkPHP 核心,导致兼容性崩坏。
为什么 composer require 是唯一安全的选择
ThinkPHP 扩展(如 topthink/think-queue、topthink/think-captcha)是独立 Composer 包,依赖声明必须精准写入 composer.json 的 require 段,并同步更新 composer.lock。
-
composer install:只按现有composer.lock复原依赖,你敲了包名也完全没用 -
composer update topthink/think-captcha:看似只更新一个包,但 Composer 会重算整个依赖图,极大概率连带升级topthink/framework,TP6.1 升到 TP8 就直接报错 -
composer require后类仍找不到?常见原因不是命令错了,而是服务提供者没注册或配置没落位
composer require 执行后还不能用?检查这三件事
装完只是第一步,ThinkPHP 6/8 的扩展大多靠服务提供者(Service Provider)启动,不注册就等于没装。
- 打开
config/app.php,确认'providers'数组里是否已加入对应类,例如:think\captcha\CaptchaService::class - 检查
composer.json里有没有"dont-discover": ["*"]—— 这行会全局禁用所有自动注册,删掉或改成具体值(如["laravel/framework"]) - 部分扩展(如
think-queue)会自动生成配置文件,但有时失败;手动检查config/queue.php是否存在,若无,从vendor/topthink/think-queue/config/queue.php复制过去
扩展安装失败的典型报错和应对
报错不是随机的,每种都指向明确环节:
立即学习“PHP免费学习笔记(深入)”;
-
Could not parse version constraint:Composer 版本太老,运行composer self-update升级到 v2.5+ -
Class 'Captcha' not found:不是没装,是 Facade 没配好,或think\facade\Captcha没在控制器里use - 执行
php think list看不到migrate:run命令:扩展包已装,但think-migration的服务提供者未被发现,需确认其extra.think-services声明是否有效 -
Command "build" is not defined:装了think-multi-app,但没运行php think service:discover注册服务,或installed.json中的services字段为空
真正容易被忽略的,是服务提供者注册这个环节——它不报错,也不提示,只是静默失效。装完包立刻跑 php think list 或调用一个基础方法,比等上线才发现问题要快得多。



















