如何在PHPStan中为不同分析路径指定对应的bootstrapFiles配置
PHPStan 原生暂不支持你预期的「按不同分析路径单独绑定对应 bootstrapFiles」的配置方式,你之前直接在配置里添加多份bootstrapFiles不生效,通常是不同子项目的Composer autoload存在类名冲突、或者autoload注册优先级异常导致的。你可以通过以下两种成熟方案解决多子项目分析的问题:
方案一(推荐):子项目独立配置+批量执行
该方案可以完全规避子项目间的依赖冲突,也是多子项目仓库的通用解法:
- 给每个子项目单独创建配置文件,比如在
apps/project_1下新建phpstan.neon,路径基于子项目根目录填写即可:
parameters: level: 1 paths: - app - config - lambda - tests bootstrapFiles: - vendor/autoload.php
project_2、project_3按照同样规则创建对应的独立配置文件即可。
2. 根目录配置统一执行入口,你可以直接在根目录的composer.json中添加自定义脚本,一键运行所有子项目的分析:
{ "scripts": { "phpstan:all": [ "phpstan analyse -c apps/project_1/phpstan.neon", "phpstan analyse -c apps/project_2/phpstan.neon", "phpstan analyse -c apps/project_3/phpstan.neon" ] } }
配置完成后,只需要运行composer run phpstan:all即可一次性完成所有子项目的静态分析。
方案二:单配置文件适配(仅适用于子项目无类名冲突场景)
如果你确认所有子项目之间没有重名类、不会出现autoload优先级冲突,可以用单个配置文件完成配置,将所有子项目的vendor目录加入scanDirectories参数让PHPStan自动扫描类定义:
parameters: level: 1 paths: - apps/project_1/app - apps/project_1/config - apps/project_1/lambda - apps/project_1/tests - apps/project_2/app - apps/project_3/app scanDirectories: - apps/project_1/vendor - apps/project_2/vendor - apps/project_3/vendor
如果扫描vendor目录产生了多余的报错,可以通过excludePaths参数排除不需要分析的vendor子目录。
内容的提问来源于stack exchange,提问作者Mitsukk
相关产品推荐
相关产品推荐

