scripts是composer.json中用于定义自动化脚本的字段,支持在安装、更新等事件触发时执行命令或PHP方法,可用于初始化项目、清空缓存等任务。

Composer 的 scripts 功能允许你在执行 Composer 命令时自动运行自定义脚本,比如在安装、更新、卸载包时触发某些操作。它非常适用于自动化项目初始化、测试运行、代码检查、清理缓存等任务。
scripts 是什么?
在 composer.json 文件中,scripts 是一个可选的字段,用于定义一系列命名的脚本(可以是 PHP 脚本、命令行指令或类方法)。这些脚本会在特定事件发生时被触发,也可以通过
composer run [script-name]手动执行。
常见事件钩子(Event Hooks)
Composer 支持多种内置事件,可以在对应阶段自动执行脚本:
-
pre-install-cmd:在
install
命令执行前运行 -
post-install-cmd:在
install
完成后运行 -
pre-update-cmd:在
update
前运行 -
post-update-cmd:在
update
后运行 - post-autoload-dump:在自动加载文件生成后运行
-
post-create-project-cmd:使用
create-project
创建项目后运行(常用于初始化配置)
如何定义脚本?
你可以在
composer.json的 scripts 字段中添加脚本。支持三种形式:
1. 直接写 shell 命令
"scripts": { "post-update-cmd": "php artisan clear-compiled", "post-install-cmd": "echo 'Installation finished.'" }2. 执行多个命令(数组形式)
"scripts": { "post-update-cmd": [ "php artisan config:clear", "php artisan route:clear", "php artisan view:clear" ] }3. 调用 PHP 类的静态方法(推荐用于复杂逻辑)
对应的 PHP 类需要能被自动加载(通常放在
src/或指定的命名空间目录),例如: namespace My\Project; class Installer { public static function postCreateProject($event) { $composer = $event->getComposer(); // 自定义初始化逻辑 echo "Project initialized successfully!\n"; } }
手动运行脚本
你可以通过
composer run来运行自定义脚本: composer run my-script
前提是已经定义了名为
my-script的脚本: "scripts": { "my-script": "echo 'Hello from custom script!'" }
实用场景示例
Laravel 项目清空缓存
"scripts": { "post-update-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postUpdate", "@php artisan config:cache", "@php artisan route:cache" ], "post-autoload-dump": [ "php artisan event:clear" ] }初始化项目配置
"scripts": { "post-create-project-cmd": [ "php bin/init.php" ] }比如
bin/init.php可以复制 .env 文件、生成密钥、提示用户下一步操作等。 基本上就这些。合理使用 scripts 能显著提升开发效率和项目自动化程度。










