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"
}
</font>
<p>注意:<code>@xxx</code> 表示调用另一个脚本,可复用;数组形式支持多个命令顺序执行;事件钩子(如 <code>post-install-cmd</code>)会自动触发。</p>
<H3>常用脚本类型:自定义命令 vs 生命周期事件</H3>
<p>两类脚本用途不同,别混用:</p>
<ul>
<li><strong>自定义命令</strong>:手动运行,如 <code>composer test</code>、<code>composer cs-fix</code>,适合开发日常操作</li>
<li><strong>生命周期事件</strong>:Composer 自动触发,如 <code>pre-autoload-dump</code>、<code>post-update-cmd</code>,适合维护一致性(如生成 autoload 文件后自动刷新配置)</li>
</ul>
<p>完整事件列表见 <a href="https://www.php.cn/link/7bf3fbacc7fe74b379f7767efc372329">Composer 官方文档</a>,常用钩子包括:<code>post-root-package-install</code>(首次安装)、<code>post-create-project-cmd</code>(用 create-project 初始化后)。</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/2457" title="PathFinder"><img
src="https://img.php.cn/upload/ai_manual/001/246/273/176646000963539.png" alt="PathFinder" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/2457" title="PathFinder">PathFinder</a>
<p>AI驱动的销售漏斗分析工具</p>
</div>
<a href="/ai/2457" title="PathFinder" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>
<H3>编写可复用的 PHP 脚本(回调函数)</H3>
<p>当 Shell 命令不够用时,可写 PHP 类方法作为回调,更可控、易调试。</p>
<p>步骤如下:</p>
<ul>
<li>新建一个类,比如 <code>scripts/BuildCommand.php</code></li>
<li>定义静态方法,接收 <code>ComposerScriptEvent</code> 对象</li>
<li>在 <code>composer.json</code> 中注册为 <code>"build": "App\Scripts\BuildCommand::run"</code></li>
<li>确保该类能被自动加载(加进 <code>autoload-dev</code> 或使用 <code>files</code> 加载)</li>
</ul>
<p>示例方法体:</p>
<font color="#666">
<pre class="brush:php;toolbar:false;">
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 能大幅减少重复操作,让团队协作更一致,也更容易把本地流程沉淀为项目标准。









