Composer 的 scripts 是 composer.json 中定义的命令别名,用于执行代码检查、测试等自动化任务,支持字符串、数组及 PHP 回调形式,并可在生命周期事件(如 post-install-cmd)中自动触发或手动运行。

Composer 的 scripts 是在 composer.json 中定义的一组命令别名,用于快速执行项目相关的自动化任务,比如代码检查、测试、构建、清理等。它不依赖外部任务管理工具(如 Make 或 npm scripts),开箱即用,且能跨平台运行。
如何定义 scripts
在 composer.json 的 scripts 字段下,以键值对形式声明脚本名称和对应命令:
- 键是自定义的脚本名(如
test、cs-check) - 值可以是字符串(单条命令)、字符串数组(按顺序执行多条命令),或指向 PHP 方法的回调(格式:
"Vendor\\Class::method")
示例:
"scripts": {
"test": ["phpunit --colors=always", "phpstan analyse src/"],
"cs-check": "php-cs-fixer check src/",
"post-install-cmd": "MyApp\\Script::onInstall"
}常用触发时机(事件脚本)
Composer 在执行某些生命周期操作时会自动运行对应名称的脚本,无需手动调用。常见内置事件包括:
-
pre-install-cmd:运行composer install前 -
post-install-cmd:运行composer install后(含首次安装) -
pre-update-cmd:运行composer update前 -
post-update-cmd:运行composer update后 -
post-autoload-dump:自动加载文件生成后(如修改了autoload配置)
这些事件适合做环境初始化、缓存清除、配置生成等操作。
如何手动运行 scripts
使用 composer run(推荐,Composer 2.2+)或兼容写法 composer run-script:
AutoIt v3 版本, 这是一个使用类似 BASIC 脚本语言的免费软件, 它设计用于 Windows GUI(图形用户界面)中进行自动化操作. 利用模拟键盘按键, 鼠标移动和窗口/控件的组合来实现自动化任务. 而这是其它语言不可能做到或无可靠方法实现的(比如VBScript和SendKeys). AutoIt 非常小巧, 完全运行在所有windows操作系统上.(thesnow注:现在已经不再支持win 9x,微软连XP都能放弃, 何况一个win 9x支持), 并且不需要任何运行库. AutoIt
-
composer run test→ 执行"test"脚本 -
composer run cs-fix -- --dry-run→ 向脚本传参(--后的内容透传给实际命令) -
composer run post-update-cmd→ 手动触发事件脚本(调试用)
注意:脚本中命令默认在项目根目录执行,路径可直接写相对路径(如 ./vendor/bin/phpunit)。
编写 PHP 回调脚本的要点
当需要更复杂逻辑(如判断环境、读取配置、交互式提示),可写 PHP 方法作为脚本入口:
- 方法必须是
public static - 接收一个
Composer\Script\Event对象参数,从中可获取 IO、composer 实例、命令类型等信息 - 返回
true表示成功,false或抛异常表示失败(会中断后续操作)
示例方法:
namespace MyApp;
use Composer\Script\Event;
class Script
{
public static function onInstall(Event $event)
{
$io = $event->getIO();
$io->write("Running post-install tasks...");
// 执行自定义逻辑...
return true;
}
}确保该类能被 Composer 自动加载(例如注册进 autoload 的 psr-4 或 classmap)。









