Rector 不能升级 Composer 依赖,只修复依赖升级后的代码兼容性问题;它基于 AST 修改源码,需先完成 composer update,再用匹配新版本的规则集(如 SetList::LARAVEL_100)处理指定路径,且必须排除 vendor/ 等无关目录。

Rector 不能直接升级 Composer 依赖,它只改 PHP 代码;想靠它“升级依赖”,必须先明确:你真正要解决的是依赖变更后引发的代码兼容性问题。
为什么 composer update 后 Rector 才有用
Rector 不碰 composer.json 或 vendor/,它只读取源码、分析 AST、按规则重写 PHP 文件。所以它的价值出现在「依赖已升级但代码还没适配」的间隙。
- 典型场景:把
laravel/framework从 v9 升到 v10,Route::controller()被移除 → Rector 可自动替换成Route::prefix()->group() - 另一个常见点:升级
phpstan/phpstan到 1.10+ 后,类型注解语法变了(如@phpstan-param→@param),Rector 的PhpStanAnnotationRector能批量清理 - 注意:Rector 不会帮你判断该不该升某个包,也不会解决
your-package和another-package之间因版本不兼容导致的conflict报错 —— 那是composer update和composer why-not的事
rector.php 配置必须匹配新依赖的语义
升级依赖后,旧规则可能失效,甚至误改。比如 Laravel 10 移除了 Illuminate\Support\Facades\Artisan 的静态调用方式,但如果你还在用 SetList::LARAVEL_90,Rector 就不会触发对应修复。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 优先用精准预设集:
$rectorConfig->sets([SetList::LARAVEL_100]);,而不是笼统的UP_TO_PHP_81 - 检查规则是否还存在:Laravel 10 的路由模型绑定语法变了,对应规则是
Rector\Laravel\Rector\MethodCall\UpdateRouteModelBindingRector,拼错类名或用了已废弃的Rector\Laravel\Rector\StaticCall\...都会导致零改动 - 路径别漏关键目录:Laravel 的
routes/web.php、app/Providers/AppServiceProvider.php默认不在src/下,需显式加进$rectorConfig->paths([...])
运行时必须排除 vendor/ 和锁定扫描范围
不加排除,Rector 可能尝试解析 vendor/laravel/framework/src/... 里的框架源码,轻则报错退出,重则把 facade 类写坏。
- 命令行强制排除:
vendor/bin/rector process app routes config --exclude vendor --exclude storage --dry-run - 配置文件里也要同步:
$rectorConfig->skip(['vendor/**', 'storage/**']);,光靠命令行参数不够保险 - 避免用
--paths=".":当前目录下若有node_modules/或dist/,Rector 会卡在无法解析的 JS/TS 文件上(报ParseError)
依赖升级 + Rector 的真实工作流
这不是一键操作,而是三步闭环:确认依赖变更 → 定位代码断点 → 用 Rector 补齐语义迁移。
- 先跑
composer update laravel/framework:^10.0 --with-all-dependencies,失败就用composer why-not laravel/framework:10.*查挡路包 - 再执行
composer outdated,重点关注提示 “required by root” 的包 —— 这些才是你得手动改代码的地方 - 最后用
vendor/bin/rector process --dry-run看哪些文件被命中;若显示 “0 files changed”,立刻检查:PHP 版本是否 ≥8.1?配置里sets是否对应新版本?目标路径是否真包含待改文件?
最容易被忽略的是:Rector 规则生效的前提,是你已经让 Composer 成功安装了目标版本的依赖。它不负责“拉代码”,只负责“修写法”。

















