PHP Rector路径包含与排除规则组合配置失效问题咨询
Rector Skip规则失效:无法排除Plugins子目录下的Tests和Vendor目录
你遇到的这个问题其实挺常见的——明明按照文档配置了skip路径,但就是没生效,核心原因是路径匹配的精度不够,导致Rector没识别到要跳过的文件。
修正后的正确配置
直接调整skip里的路径写法,在目录末尾加上/**来递归匹配目录下的所有文件和子目录,修改后的配置如下:
return static function (RectorConfig $rectorConfig): void { $rectorConfig->paths([ __DIR__ . '/plugins/*', ]); $rectorConfig->skip([ // 匹配每个插件下的tests目录及其所有内容 __DIR__ . '/plugins/*/tests/**', // 匹配每个插件下的vendor目录及其所有内容 __DIR__ . '/plugins/*/vendor/**', ]); };
为什么原来的配置不生效?
Rector的skip规则是基于具体文件路径来匹配的,而不是目录本身。你之前写的__DIR__ . '/plugins/*/tests'只会精准匹配名为tests的目录节点,不会覆盖目录里的文件和子目录。加上/**后,才会递归匹配该目录下的所有内容,让Rector真正跳过这些文件。
另一种可选方案:用相对路径简化配置
如果你的rector.php文件放在项目根目录,也可以改用相对路径来写,更简洁:
return static function (RectorConfig $rectorConfig): void { $rectorConfig->paths([ 'plugins/*', ]); $rectorConfig->skip([ 'plugins/*/tests/**', 'plugins/*/vendor/**', ]); };
验证配置是否生效
可以用--dry-run命令测试配置,确认是否还有来自目标目录的文件被处理:
vendor/bin/rector process --dry-run
如果还是有问题,建议检查一下你的Rector版本,尽量使用v0.17及以上的版本,旧版本的通配符匹配可能存在一些兼容性问题。
内容的提问来源于stack exchange,提问作者dnaumann
相关产品推荐
相关产品推荐

