rector不能通过composer require rector/rector --dev直接运行,因其需绕过项目自动加载自行扫描类,否则导致类找不到、依赖冲突、内存溢出;正确方式是用composer create-project隔离安装,并严格配置路径、规则集和文件扩展名。

Rector 不能靠 composer require rector/rector --dev 装完就直接跑,尤其在旧项目里——它会加载错类、解析失败、内存溢出,甚至静默跳过所有文件。
为什么 composer require rector/rector --dev 安装后经常运行失败
这不是配置问题,是加载机制冲突:Rector 启动时要绕过 Composer 的自动加载,自己扫描全部 PHP 文件并重建 AST;但 --dev 安装会让它的类混进项目 autoloader,导致 Rector\Core\Application\RectorApplication 找不到,或 Class "Rector\..." not found。
- 项目里已有
symfony/console或phpstan/phpstan等组件,版本和 Rector 内部依赖不兼容,composer update会强行降级它们,破坏 Rector 运行环境 -
vendor/bin/rector默认用系统 PHP 配置(比如memory_limit=128M),而 Rector 实际需要-d memory_limit=-1,不手动加参数就容易 OOM - PHP 版本低于 Rector 要求(如 v1.x 需 PHP ≥8.0),Composer 解析依赖时直接报
Your requirements could not be resolved,不是“装不上”,是根本没法算出可行解
正确安装方式:用 composer create-project 隔离环境
这是目前最稳的落地方式,彻底避开项目依赖干扰。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行:
composer create-project rector/rector:0.23.1 rector --stability=stable --no-install(0.23.1兼容 PHP 7.4+,老项目首选) - 进入目录:
cd rector && composer install --no-dev(去掉测试工具,减小体积) - 调用时显式指定 PHP 参数:
php -d memory_limit=-1 bin/rector process ../my-old-project/src --config ../my-old-project/rector.php - 别把
rector/目录放进项目 git,只存rector.php和规则配置到旧项目里即可
rector.php 配置里三个必填项,漏一个就白配
新版 Rector(v1.0+)配置结构和旧版完全不兼容,复制网上教程大概率报错。
-
$rectorConfig->paths([...])必须写全路径,例如__DIR__ . '/src',不能只写['src']—— 软链、Docker 挂载场景下路径会解析失败 -
$rectorConfig->sets([...])必须用完整常量名,比如SetList::PHP_80(注意双下划线),写成SetList::PHP80或LevelSetList::UP_TO_PHP_80都不生效 -
$rectorConfig->fileExtensions(['php'])必须显式声明,否则连.php文件都不扫;如果项目有.inc或模板文件,得手动加进去
运行前必须确认的两件事
很多人跑完 rector process 显示 “0 files changed”,其实根本没匹配到目标文件,或者解析器卡在语法上。
- 先用
--dry-run --verbose看实际处理了哪些文件,确认路径是否被识别;默认只扫src和tests,lib/或app/得手动加进paths() - 如果报
ParseError: syntax error或大量文件被跳过,不是规则写错了,是底层nikic/php-parser版本太低——Rector 自带的 parser 不支持你源码里的语法(比如 PHP 5.6 的create_function()或 PHP 7.4 的??=),此时只能换更高版本 Rector(如 0.24+),但前提是你的运行环境已是 PHP 8.1+
真正麻烦的从来不是“怎么写规则”,而是让 Rector 先成功读进代码——路径、PHP 版本、parser 能力、autoload 范围,四者缺一不可。配完不验证 --dry-run,等于没配。










