rector 安装失败主因是 php cli 缺失 xml、tokenizer、json 扩展,非 composer 版本问题;需检查 php -m,按系统补全扩展;全局安装须配置 path,推荐本地安装;rector.php 配置需严格匹配规则类名、用 dir 定义路径、php 版本不超 cli 实际版本;运行时应限定文件后缀、排除 vendor/tests、避免处理非 php 文件。

Composer 安装 Rector 失败:不是版本问题,是 PHP 扩展没开
直接装 rector/rector 报错 ext-xml 或 ext-tokenizer 缺失?别急着降级 Composer —— Rector 是 PHP 工具,它运行时依赖的是你本地 PHP CLI 的扩展,不是 Composer 自身的环境。
- 用
php -m检查是否启用了xml、tokenizer、json(三者缺一不可) - Mac 用 Homebrew 装 PHP 时,默认不带
xml,得重装:brew install php@8.2 --with-libxml - Linux 上常见于没装
php-xml包(Ubuntu/Debian)或php-xmlrpc(CentOS/RHEL),不是php-mbstring那种“看着像但不对”的包 - Windows 用户注意:WAMP/XAMPP 的 CLI PHP 和图形界面 PHP 配置文件可能不同,
php --ini看加载的是哪个php.ini
全局安装 vs 项目本地安装:选错位置会找不到 rector 命令
很多人执行 composer global require rector/rector 后,在任意目录敲 rector 都提示 command not found —— 这不是 Rector 的锅,是 Composer 的 bin 目录没进系统 PATH。
- 先查全局 bin 路径:
composer global config bin-dir --absolute,比如返回/home/you/.composer/vendor/bin - 把这个路径加进 shell 配置(
~/.bashrc或~/.zshrc):export PATH="$HOME/.composer/vendor/bin:$PATH" - 更推荐项目本地安装:
composer require --dev rector/rector,然后用vendor/bin/rector调用,避免全局污染和权限问题 - 别用
composer create-project起 Rector 项目 —— 它不是框架,不需要独立项目结构
rector.php 配置写错:规则名拼错、路径漏 __DIR__、PHP 版本设太高
Rector 启动就报 Class "Rector\..." not found 或配置里路径解析失败?大概率是 rector.php 里引用了不存在的规则类,或目录路径没基于当前文件定位。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 规则名必须严格匹配官方文档(如
Rector\Php80\Rector\Class_\AnnotationToAttributeRector),少个\或大小写错都加载失败 - 所有路径要用
__DIR__ . '/src',别写死'./src'—— Rector 运行时工作目录不一定是配置文件所在目录 - PHP 版本设置(
$parameters->set(Option::PHP_VERSION_FEATURES, PhpVersion::PHP_81))不能高于你本地 PHP CLI 实际版本,否则解析 AST 失败 - 如果只跑单个规则,别盲目复制全量配置模板;从空配置开始,逐条加规则,方便定位哪条出问题
运行后没变化或报错 Could not process ... syntax error:AST 解析卡在非 PHP 文件或语法糖上
执行 rector process src --dry-run 显示 “0 files changed”,或者中途崩在某个文件,错误信息含 syntax error?Rector 默认只处理 .php,但它会尝试读取你指定路径下所有文件 —— 包括 .phpstub、.inc、甚至 composer.json(如果你路径写太宽)。
- 显式限定后缀:
rector process src --extensions=php,php.inc,别依赖默认值 - 排除干扰文件:
--exclude-file="*/tests/*" --exclude-file="*/vendor/*",尤其当项目混了旧式.inc或模板文件时 - PHP 8.2+ 的只读属性(
readonly)、8.3 的类型化数组(array<int string></int>)需要对应版本的 Rector 规则集,老版本 Rector 直接跳过或报错 - 遇到某文件死循环或内存溢出,加
--no-progress-bar --debug看卡在哪一行,有时只是注释里写了未闭合的 PHPDoc 标签
最常被忽略的一点:Rector 不改 vendor 里的代码,也不建议你去改 —— 它只处理你项目源码。如果升级目标是第三方包的 API 变更,得先确认该包自己是否提供迁移工具,或改用其兼容层。










