composer脚本是将shell命令、php脚本或Composer命令封装为可复用别名,通过composer run-script或简写composer xxx触发;支持数组顺序执行、内置别名引用、事件钩子自动执行及跨平台php脚本替代。

在 composer.json 的 scripts 段中定义自定义命令,本质是把 shell 命令、PHP 脚本或 Composer 命令封装成可复用的别名,通过 composer run-script xxx 或简写 composer xxx 触发。
在 scripts 中定义命令
在 composer.json 的 "scripts" 对象里添加键值对,键是命令名(如 "test"),值是待执行的命令字符串或数组:
- 单条命令直接写字符串:
"test": "phpunit" - 多条命令用数组顺序执行(默认 shell 模式):
"test": ["@clear-cache", "phpunit --colors=always"] - 支持 Composer 内置命令别名,如
@dev、@prod,也可引用其他自定义脚本:"clear-cache": "rm -rf var/cache/*" - 若需跨平台兼容,推荐用 PHP 脚本代替 shell 命令(比如 windows 不认
rm)
支持事件钩子的自动执行
Composer 脚本不仅可手动运行,还能绑定到生命周期事件,例如:
-
"post-install-cmd":运行composer install后触发 -
"pre-autoload-dump":生成自动加载文件前执行 -
"post-update-cmd":运行composer update后触发
这些钩子会自动执行,无需手动调用;多个脚本可用数组定义,顺序执行。
执行自定义脚本的几种方式
定义好后,有三种常用执行方式:
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统
24 -
composer run-script test—— 显式调用,最清晰 -
composer test—— 简写形式(Composer 2.2+ 支持,要求脚本名不含连字符或特殊字符) -
composer run-script test --no-ansi --verbose—— 加参数控制输出行为
注意:如果脚本名和 Composer 原生命令冲突(比如叫 "install"),必须用完整 run-script 形式,否则会执行原生命令。
调试与常见问题
脚本出错时,Composer 默认只显示返回码。开启调试更方便定位问题:
- 加
--verbose查看完整命令和输出 - 加
--no-interaction避免交互式命令卡住 CI 流程 - windows 用户慎用
rm、mkdir -p等 bash 特有命令,改用php -r "exec('rd /s /q cache');"或专用 PHP 脚本 - 环境变量可用
$COMPOSER_HOME、$PWD等,但不要依赖未声明的自定义变量(不会自动注入)
基本上就这些。脚本能力不复杂但容易忽略细节,合理利用能显著简化日常开发和部署流程。
以上就是如何在 composer.json 的 scripts 中定义并执行自定义命令?的详细内容,更多请关注php中文网其它相关文章!