phpstan composer scripts 必须置于根级 composer.json 的最外层 scripts 键下,与 require 同级;需用 composer require --dev phpstan/phpstan 安装并调用 vendor/bin/phpstan;脚本名仅支持字母和短横线;test 可组合为 ["@phpstan", "@phpunit"];性能问题应通过 phpstan.neon 精准配置 paths、excludepaths 和 level 解决。

PHPStan Composer scripts 配置后不触发分析?检查 scripts 键是否在根级 composer.json
PHPStan 的 composer scripts 本质是通过 Composer 的脚本机制调用命令,不是插件式自动挂载。如果执行 composer analyze 报错“Script does not exist”,大概率是把 scripts 写进了子包或嵌套配置里。
-
scripts必须直接放在项目根目录composer.json的最外层对象中,和require、autoload同级 - 不要写在
extra或config下,那些位置 Composer 完全不识别为可执行脚本 - 确保键名是纯字母+短横线(如
analyze),避免下划线或空格;Composer 脚本名不支持_
运行 composer analyze 提示 Class 'PHPStan\Analyser\Analyser' not found
这是 PHPStan 未被正确加载的典型表现,常见于安装方式与使用方式错配。PHPStan 不推荐全局安装,尤其当项目依赖特定版本时。
- 必须用
composer require --dev phpstan/phpstan安装到当前项目,而不是composer global require - 脚本命令应调用 vendor 二进制:用
vendor/bin/phpstan,不是phpstan(后者会找全局或 PATH 中的) - 若用
phpstan.neon配置文件,确认它在项目根目录,且vendor/bin/phpstan能读取到(路径不区分大小写但区分存在性)
如何让 composer test 自动串联 PHPStan 分析?避免重复写命令
Composer 允许脚本组合,但要注意执行顺序和错误传播——默认失败即停,适合质检场景。
- 在
composer.json的scripts中定义:"test": ["@phpstan", "@phpunit"](注意是数组,不是字符串) - 每个子脚本需单独声明:
"phpstan": "vendor/bin/phpstan analyse --no-progress" - 加
--no-progress可减少 CI 日志噪音;CI 环境建议加--error-format=github方便集成 - 别用
&&拼接 shell 命令,那会绕过 Composer 的错误捕获和退出码处理
PHPStan 分析变慢或内存溢出?调整 phpstan.neon 的层级与路径
默认全量扫描 src/ 和 tests/ 很容易超时,尤其在 CI 或低配机器上。关键不是关掉检查,而是精准限定范围。
立即学习“PHP免费学习笔记(深入)”;
- 在
phpstan.neon中显式指定paths:,例如只扫变更模块:- src/MyPackage,不写- src - 排除测试辅助类:
excludePaths:加上tests/_support/这类非业务代码路径 - 等级设为
level: 5起步(不是 8),高阶规则对泛型、模板支持要求高,也更吃内存 - 若用 Docker 或 GitHub Actions,记得给容器分配至少 2GB 内存,PHPStan 在 level 7+ 常驻内存可能突破 1.5GB
实际跑起来才发现,phpstan.neon 里一个缩进错误、路径少个斜杠、或者 level 数字写成字符串,都会让整个分析静默跳过某些文件——这些细节不报错,只少输出,最难排查。











