rector 必须作为独立工具安装,不能通过 composer require 安装到项目中,否则会因自动加载冲突、依赖不兼容或内存溢出失败;正确方式是用 composer create-project 隔离安装或全局安装并严格匹配 php 版本。

Rector 不能通过 composer install 安装到项目里运行 —— 它必须作为独立的、全局或本地可执行工具存在,否则会因自动加载冲突、版本锁死或内存溢出直接失败。
为什么 composer require rector/rector --dev 不够用
很多人执行完这行命令就以为装好了,结果运行 vendor/bin/rector process 时卡住、报 Class "Rector\Core\Application\RectorApplication" not found,或提示 Allowed memory size exhausted。根本原因是:
- Rector 启动时需绕过 Composer 的自动加载机制(它要自己扫描和重载所有类),而
--dev安装会让它混进项目 autoloader,导致类加载顺序错乱 - 项目依赖的 PHP 版本、symfony/console 等组件可能与 Rector 内部要求不兼容,
composer update会强行降级/升级,破坏 Rector 运行环境 - Rector 默认使用
php -d memory_limit=-1启动,但如果你只靠vendor/bin/rector,PHP CLI 配置仍走系统默认值,极易 OOM
正确安装方式:用 composer global 或 composer create-project
推荐优先用 create-project,隔离干净、版本可控、不污染全局环境:
composer create-project rector/rector:0.23.1 rector --stability=stable --no-install
然后进入目录并安装依赖(注意加 --no-dev 避免装测试工具):
cd rector && composer install --no-dev
之后就能安全运行:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
php bin/rector process src --set php80
如果坚持全局安装(仅限单项目且信任全局环境),必须确保:
- 已配置 ~/.composer/vendor/bin 在 $PATH 中
- 执行 composer global require rector/rector:^0.23(别用 ^0.24,0.24+ 强制 PHP 8.1+,很多老项目扛不住)
- 全局安装后,永远用 rector 命令,不要用 vendor/bin/rector
rector.php 配置文件里最容易写错的三处
不是所有文档示例都能直接抄。以下配置项一旦写错,Rector 会静默跳过规则或报奇怪的 InvalidArgument:
-
parameters必须顶层定义,不能包在return static function (ContainerConfigurator $containerConfigurator): void { ... }里再嵌套一层parameters—— 这是 0.23 和 0.22 的重大语法断裂点 -
paths是数组,但不能写成['src', 'tests']就完事;如果项目有软链或 Docker 挂载,得显式加__DIR__ . '/src',否则路径解析失败 -
skip列表里若含PhpDocInfo::class,必须先use Rector\BetterPhpDocParser\ValueObject\PhpDocInfo;,否则类名解析失败,整个配置加载中断
升级 PHP 版本时,别只盯着 --set,先检查 composer.json 的 platform
Rector 的 --set php80 或 --set php81 只改语法,不改运行时行为。但如果你的 composer.json 里没设 "platform": {"php": "8.0"},Composer 仍可能装入 PHP 7.x 兼容的旧版依赖(比如 symfony/console v5.4),导致重构后代码在 PHP 8 下跑不起来。
实操建议:
- 先运行
composer config platform.php 8.0锁定平台版本 - 再
composer update --with-all-dependencies,让依赖真正适配目标 PHP 版本 - 最后才用 Rector 扫描重构 —— 否则你修了语法,却留下一堆
TypeError: Return value must be of type string, null returned
跨大版本升级(如 PHP 7.4 → 8.2)时,platform 设置和依赖更新比 Rector 本身更耗时间,也更容易漏掉。










