Composer 自定义脚本需在 composer.json 的 scripts 对象中定义键值对,键为脚本名(如 dev:clear-cache),值为命令字符串或数组,支持 PHP 方法调用、shell 命令及 Composer 命令,多条命令建议用数组确保顺序,@开头的命令由 Composer 自动解析路径。
Composer 运行自定义脚本,本质是通过 scripts 字段在 composer.json 中声明命令,再用 composer run 或别名触发 —— 不需要写 shell wrapper,也不依赖外部 Makefile。
怎么在 composer.json 里定义一个可运行的脚本
在 composer.json 的 scripts 对象中添加键值对,key 是脚本名(如 post-install-cmd 或自定义名 dev:clear-cache),value 是要执行的命令字符串或数组。支持 PHP 函数调用、shell 命令、其他 Composer 命令。
示例:
"scripts": {
"dev:clear-cache": "php artisan cache:clear",
"test:unit": ["@php vendor/bin/phpunit --testsuite=unit"],
"pre-deploy": [
"@composer install --no-dev --optimize-autoloader",
"php -r \"file_put_contents('VERSION', trim(`git rev-parse HEAD`));\""
]
}
- 单条命令可写字符串,多条建议用数组,保证执行顺序
- 以
@开头的命令(如@composer、@php)会被 Composer 自动解析为当前项目环境下的可执行路径,避免硬编码./vendor/bin/composer - PHP 函数调用需写成
MyClass::myMethod形式,且类必须已加载(通常靠自动加载或autoload-dev)
运行脚本时为什么提示 “Script not found” 或直接静默退出
常见原因不是拼写错误,而是脚本名未被识别或未满足触发条件: