在 composer.json 的 "scripts" 中用 && 连接 php_codesniffer 和 phpstan 命令,如 "check-cs": "phpcs --standard=psr12 src/ && phpstan analyse src/",确保失败短路;注意跨平台兼容性、path 配置及参数透传方式。

scripts 里怎么写 PHP_CodeSniffer 和 PHPStan 的并行检查
直接在 composer.json 的 "scripts" 段里定义命令,就能用 composer run 或 composer [name] 触发。关键是把多个工具串成一个可复用的流程,而不是每次手动敲一长串。
- 推荐用
&&连接(不是;),确保前一个失败时后续不执行:比如"phpcs": "phpcs --standard=PSR12 src/ && phpstan analyse src/" - 加
--no-ansi和-v(verbose)对 CI 友好,但本地调试建议先去掉--no-ansi看颜色输出 - PHPStan 默认只扫描
src/,如果项目有tests/或app/,得显式加上:phpstan analyse src/ tests/ app/ - 别把
phpcbf(自动修复)和phpcs放同一个 script 里——修复后代码变了,再 lint 就可能误报;拆成"fix-cs"和"check-cs"更可控
为什么 vendor/bin/ 下的命令在 scripts 里能直接写名字
Composer 会自动把 vendor/bin/ 加进 PATH 环境变量里,所以 phpcs、phpunit、phpstan 这些二进制名不用写成 vendor/bin/phpcs —— 除非你本地装了全局版本,且版本和项目不一致,那就容易出错。
- 运行
composer run -v check-cs可以看到实际执行的完整命令,确认调用的是哪个路径下的二进制 - CI 环境里有时 PATH 不包含
vendor/bin(比如某些 Alpine 镜像),这时必须写全路径:"phpcs": "vendor/bin/phpcs --standard=PSR12 src/" - Windows 下 CMD 不支持
&&短路逻辑,得改用vendor/bin/phpcs ... || exit /b 1 && vendor/bin/phpstan ...,但更稳妥是统一用 PowerShell 或直接切到 Git Bash
script 脚本里怎么传参数给 PHPUnit 或 PHPStan
Composer 的 scripts 本身不解析命令行参数,但可以用 @php + $@ 透传,或者靠 composer run -- [args] 配合 %%ARGS%% 占位符(仅限 Windows)—— 实际上最可靠的是用 -- 分隔。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 写成
"test": "phpunit --no-coverage"是固定参数;想动态传,得这样:"test": "phpunit --no-coverage --",然后运行composer test -- --filter=testSomething -
%%ARGS%%在 Windows 上可用,但 Linux/macOS 不认,跨平台项目别用 - PHPStan 支持
--configuration,建议把配置抽成phpstan.neon,script 里只写phpstan analyse --configuration=phpstan.neon,避免命令行过长 - 别在 script 值里直接拼
$1或$@—— Composer 不做 shell 展开,那只是字面字符串
“composer run” 报错 “ScriptNotFoundException” 怎么快速定位
不是脚本名拼错了,就是当前目录下没有有效的 composer.json,或者 JSON 格式损坏。Composer 不会往上层目录自动查找,也不会读取 composer.lock。
- 先运行
composer list,看返回的命令列表里有没有你定义的 script 名——没有就说明composer.json没加载成功 - 检查
composer.json顶层是否有"scripts"字段,注意不是"scripts-dev"(旧版字段,已废弃) - JSON 中用了中文引号、尾随逗号、注释,都会导致解析失败,用
composer validate快速验证 - 如果用的是 Composer 2.5+,
composer run默认只显示自定义脚本;加-a才显示所有内置命令,别误以为自己的没注册上
复杂点在于不同环境对 PATH、shell 特性、JSON 解析的容忍度不一致,而 Composer 的错误提示往往只说“找不到 script”,不会告诉你其实是 JSON 里多了一个空格。










