composer run-script 可手动执行 composer.json 中定义的脚本,支持传参、调试及内置事件触发,提升 PHP 项目自动化效率。

在使用 Composer 管理 PHP 项目时,composer run-script 是一个非常实用的命令,用于手动触发定义在 composer.json 中的自定义脚本或内置事件脚本。它不仅支持执行项目中配置的脚本,还能传参、调试执行过程,提升开发效率。
基本语法和结构
命令的基本格式如下:
composer run-script [options] [–] [zuojiankuohaophpcnscript>] […]
其中:
script:你在 composer.json 的 scripts 字段中定义的脚本名称。args:传递给脚本的参数(如果脚本是可执行命令)。—:用于分隔 run-script 自身的选项与传递给脚本的参数。
例如,若 composer.json 包含:
"scripts": { "test": "phpunit"}
你可以运行:
composer run-script test
常见用法与技巧
掌握以下几种典型场景,能更高效地利用该命令:
1. 传递参数给脚本
有些脚本需要接收参数,比如只运行某个测试文件:
composer run-script test — –filter=testLogin tests/LoginTest.php
注意这里的双横线 --,它告诉 Composer 后面的内容是传给 phpunit 的,而不是给 run-script 的。
2. 列出所有可用脚本
查看当前项目支持哪些脚本,可以不指定脚本名并加上 --list:
composer run-script –list
这会列出 scripts 中定义的所有脚本及其说明(如果有注释或描述)。
3. 静默或详细模式运行
使用 -q 静默输出:composer -q run-script test使用 -v 查看详细信息:composer -v run-script post-install-cmd
调试脚本执行过程时,-vv 或 -vvv 能显示更详细的执行链和环境信息。
4. 跳过脚本事件继承
ONLYOFFICE
用ONLYOFFICE管理你的网络私人办公室
1027 查看详情
如果你的项目依赖其他包,而它们也定义了脚本,Composer 默认会合并这些脚本。使用 --no-plugins 或 --no-scripts 可控制行为,但更直接的是通过配置避免干扰。若只想运行本地定义的脚本,确保没有全局插件影响即可。
5. 执行 Composer 内置事件脚本
Composer 在某些操作(如 install、update)时自动触发事件,比如 post-install-cmd。你也可以手动触发它们:
composer run-script post-update-cmd
这在修改了处理逻辑后重新执行很有用,无需重新 update。
6. 使用别名简化常用命令
虽然 Composer 本身不支持脚本别名,但可以通过 shell 别名或 Makefile 封装常用 run-script 命令。例如在 .bashrc 中添加:
alias ctest=’composer run-script test — –colors=always’
7. 支持多命令与条件执行
在 scripts 中可以用 && 连接多个命令:
"scripts": { "build": "rm -rf build/ && mkdir build && php bin/compiler.php"}
然后运行 composer run-script build 即可顺序执行。
脚本类型说明
Composer 支持两种脚本处理方式:
直接命令字符串:如 "test": "phpunit",直接交给 shell 执行。PHP 回调函数:格式为 "Class::method",需在类中实现静态方法,常用于复杂逻辑,如清理缓存、生成文件等。
例如:
"scripts": { "post-install-cmd": [ "MyScript::compileAssets", "echo 'Done!'" ]}
调试脚本执行问题
当脚本未按预期运行时,建议:
使用 composer run-script -v script-name 查看执行细节。确认脚本命令是否在系统 PATH 中可用。检查相对路径是否正确,特别是在不同环境下执行。对于 PHP 回调,确保类可自动加载(通常放在 autoload 范围内)。
基本上就这些。熟练使用 composer run-script 能让你更好地组织项目自动化任务,减少重复命令输入,提高协作一致性。
以上就是composer run-script 命令的详细用法和技巧的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/869308.html
微信扫一扫
支付宝扫一扫