Composer 的 scripts 是项目级自动化任务的核心机制,支持在 composer.json 中定义自定义命令(如 test、cs-fix)和生命周期事件(如 post-install-cmd),可执行 PHP 回调、Shell 命令或组合操作,提升开发效率与流程一致性。

Composer 的 scripts 是项目级自动化任务的核心机制,它让你用一行命令就能触发 PHP、Shell 或其他工具操作,比如自动加载类、运行测试、生成文档或清理缓存。
在 composer.json 中定义 scripts
所有脚本都写在 composer.json 的 scripts 字段下,格式为 "脚本名": "命令"。支持 PHP 回调、Shell 命令、多命令组合(用 && 连接)。
示例:
"scripts": {
"post-install-cmd": [
"@php -r \"echo '安装完成!\\n';\"",
"php artisan optimize:clear"
],
"test": "vendor/bin/phpunit",
"cs-fix": "vendor/bin/php-cs-fixer fix --dry-run",
"dev-start": [
"@start-server",
"@watch-assets"
],
"start-server": "php -S localhost:8000 -t public",
"watch-assets": "npm run watch"
}
注意:@xxx 表示调用另一个脚本,可复用;数组形式支持多个命令顺序执行;事件钩子(如 post-install-cmd)会自动触发。
常用脚本类型:自定义命令 vs 生命周期事件
两类脚本用途不同,别混用:
- 自定义命令:手动运行,如
composer test、composer cs-fix,适合开发日常操作 - 生命周期事件:Composer 自动触发,如
pre-autoload-dump、post-update-cmd,适合维护一致性(如生成 autoload 文件后自动刷新配置)
完整事件列表见 Composer 官方文档,常用钩子包括:post-root-package-install(首次安装)、post-create-project-cmd(用 create-project 初始化后)。
编写可复用的 PHP 脚本(回调函数)
当 Shell 命令不够用时,可写 PHP 类方法作为回调,更可控、易调试。
步骤如下:
- 新建一个类,比如
scripts/BuildCommand.php - 定义静态方法,接收
Composer\Script\Event对象 - 在
composer.json中注册为"build": "App\\Scripts\\BuildCommand::run" - 确保该类能被自动加载(加进
autoload-dev或使用files加载)
示例方法体:
public static function run(Event $event)
{
$io = $event->getIO();
$io->write("正在构建前端资源…");
exec('npm run build 2>&1', $output, $return);
if ($return !== 0) {
$io->error("构建失败!");
return false;
}
$io->success("构建完成 ✅");
}
实用技巧与避坑提醒
- 脚本中尽量用相对路径或
$COMPOSER_HOME环境变量,避免硬编码绝对路径 - Windows 下慎用
&&,推荐拆成数组或改用 PowerShell / Bash 子进程 - 调试脚本加
-v(verbose)参数:如composer run test -v - 想跳过某个事件?加
--no-scripts参数,比如composer install --no-scripts - 全局脚本不可用 —— Composer 的 scripts 只作用于当前项目,不支持跨项目复用(需靠插件或外部工具)
基本上就这些。合理组织 scripts 能大幅减少重复操作,让团队协作更一致,也更容易把本地流程沉淀为项目标准。










