rector 安装失败主因是 php 版本低于 8.1 或缺失 ext-json/ext-tokenizer/ext-xml;升级 laravel 须严格匹配目标版本规则集,且需手动修复配置、迁移、blade 等 rector 不覆盖的变更。

Composer 安装 Rector 失败:不是版本冲突就是 PHP 扩展缺
直接用 composer require rector/rector --dev 很可能报错,常见两种情况:require 不了(依赖树冲突),或者装上了但运行就报 Class 'Rector\Core\Application\RectorApplication' not found(PHP 扩展缺失或 autoloader 没生效)。
根本原因是 Rector 6+ 要求 PHP 8.1+,且强制依赖 ext-json、ext-tokenizer、ext-xml —— Laravel 9/10 项目常忽略后两者。
- 先确认 PHP 版本:
php -v,低于 8.1 就别硬装 Rector 6,改用composer require rector/rector:^5.0 --dev - 检查扩展:
php -m | grep -E "json|tokenizer|xml",缺哪个就补哪个(如 Ubuntu 下sudo apt install php-xml php-tokenizer) - 装完后清下 Composer 缓存:
composer clear-cache,再重装,避免旧 lock 文件干扰
升级 Laravel 时 Rector 配置写错:规则集不匹配版本会白跑
Rector 升级 Laravel 不是“一键全量”,它靠规则集(sets)驱动,而不同 Laravel 版本对应不同规则集。用错 set,比如对 Laravel 8 项目用了 LaravelSetList::LARAVEL_100,轻则跳过所有文件,重则改出语法错误。
核心原则:规则集必须严格对齐「目标版本」,不是当前版本,也不是模糊的“最新”。
- 从 Laravel 8 升到 9?用
LaravelSetList::LARAVEL_90 - 从 9 升到 10?用
LaravelSetList::LARAVEL_100 - 升级前务必删掉
config/rector.php里多余的 set,只留一个目标版本 set;多个 set 同时启用容易互相覆盖 - 别信网上抄来的“全版本兼容配置”,Rector 的 Laravel 规则集不向下兼容
运行 rector process 报错:路径没加对,或 vendor 里类被误改
vendor/bin/rector process app/ config/ database/ --dry-run 是最常用命令,但实际执行时经常卡在 PHP Fatal error: Cannot declare class ... because the name is already in use 或直接跳过所有文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
问题出在两处:一是扫描路径太宽,二是没排除 vendor。
- 必须显式排除
vendor/和storage/:--exclude vendor --exclude storage,否则 Rector 可能尝试重写已编译的 facade 类 - 路径参数要具体,别写
.或./,优先用app/ config/ database/ routes/ resources/lang/ resources/views/ tests/这种明确列表 -
--dry-run时注意看输出末尾的 “Applied rules” 是否为空——空说明路径没命中,或规则没触发,不是成功
Laravel 升级后测试崩了:Rector 改了代码但没动配置和迁移
Rector 只处理 PHP 代码层面的语法与 API 替换(比如 Auth::user() → auth()->user()),它不会碰 .env、config/app.php、数据库迁移、前端资源或第三方包适配。
很多人跑完 Rector 就直接 php artisan migrate,结果 Class App\Models\User does not exist —— 因为 Rector 没动命名空间变更(如 App\User → App\Models\User)的模型引用,但 Laravel 10 默认启用了模型目录结构,而旧迁移里还写着 use App\User;。
- 升级后第一件事:手动检查
database/migrations/里所有use语句,补全Models\前缀 -
config/auth.php里的'model' => App\User::class必须同步改成App\Models\User::class - Rector 不改 Blade 中的
@auth或{{ Auth::user() }},这些得人工扫一遍,尤其在resources/views里
真正麻烦的从来不是 Rector 跑不跑得通,而是它改完之后,那些它“故意不管”的地方,反而最容易漏掉。










