Composer scripts可在特定生命周期自动执行任务,如数据库迁移、缓存清理;通过composer.json的"scripts"配置,支持命令行或PHP方法调用,可自定义脚本并通过composer run执行,需注意事件时机与执行上下文。

在 Composer 中,scripts 是一种强大的功能,允许你在特定生命周期事件(如安装、更新、卸载等)触发时自动执行自定义脚本。这些脚本可以是 PHP 脚本、命令行指令或外部程序。
scripts 的作用和常见场景
Composer 的 scripts 主要用于自动化项目中的常规任务。典型用途包括:
如何编写 scripts
scripts 定义在项目的 composer.json 文件中,通过 "scripts" 键来配置。每个脚本对应一个事件名,值是一个命令数组。
示例:基本 scripts 配置{
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan migrate --force",
"php artisan config:cache"
],
"pre-update-cmd": [
"echo '即将开始更新依赖'"
]
}
}
支持的常用事件包括:
- pre-install-cmd:install 命令执行前
- post-install-cmd:install 命令执行后
- pre-update-cmd:update 命令执行前
- post-update-cmd:update 命令执行后
- post-autoload-dump:自动加载重建后
- post-create-project-cmd:项目创建完成后
使用 PHP 类方法作为脚本
除了命令行语句,你还可以调用 PHP 类的静态方法。这类方法必须接受一个 Composer\Script\Event 参数。
{
"scripts": {
"post-update-cmd": "App\\Console\\ComposerScripts::postUpdate"
}
}
对应的 PHP 类文件:
namespace App\Console;
use Composer\Script\Event;
class ComposerScripts
{
public static function postUpdate(Event $event)
{
echo "依赖已更新,正在执行清理...\n";
// 执行一些逻辑,比如删除临时文件
if (is_dir('bootstrap/cache')) {
unlink('bootstrap/cache/config.php');
}
}
}
确保该类能被自动加载(通常放在 composer autoload 路径中)。
自定义脚本并手动运行
你可以定义自己的脚本名称,并通过 composer run 来执行。
{
"scripts": {
"clear-cache": [
"php artisan cache:clear",
"php artisan route:clear"
],
"build": [
"@composer install",
"@composer run clear-cache",
"echo '构建完成'"
]
}
}
运行方式:
composer run clear-cache
或者链式执行:
composer run build
注意:@composer 可以在脚本中调用其他 Composer 命令。
注意事项和最佳实践
- 脚本按顺序执行,遇到错误默认会停止(除非命令用
|| true忽略错误) - 生产环境中避免运行耗时或交互式脚本
- 尽量使用相对路径或环境变量保证可移植性
- 调试脚本时可加
-v参数查看详细输出:composer install -v
基本上就这些。合理使用 Composer scripts 能显著提升项目自动化程度,减少重复操作。关键是根据项目流程设计合适的钩子和命令。不复杂但容易忽略的是事件触发时机和脚本执行上下文。










