pre-install-cmd 可在 composer install 前执行自定义脚本,1. 在 composer.json 的 scripts 中定义命令数组,支持 shell 命令、PHP 脚本和 Composer 别名;2. 对复杂逻辑可使用 PHP 类方法,通过命名空间注册并实现静态函数处理事件,需配合 autoload 加载;3. 注意其仅在 install 前触发,不适用于 update,脚本非零退出码将中断安装,应确保权限与跨平台兼容性。

在使用 Composer 时,可以通过配置 pre-install-cmd 钩子,在执行 composer install 命令前自动运行一些自定义脚本。这个机制适用于需要在依赖安装前完成某些操作的场景,比如环境检查、生成配置文件或清除缓存。
1. 在 composer.json 中定义 pre-install-cmd
打开项目根目录下的 composer.json 文件,在 scripts 字段中添加 pre-install-cmd:
{
"scripts": {
"pre-install-cmd": [
"echo '即将开始安装依赖...'",
"php scripts/check-env.php",
"@php artisan clear-compiled"
]
}
}
说明:
- 可以指定多个命令,按顺序执行。
- 支持 shell 命令(如
echo)和 PHP 脚本(如php scripts/check-env.php)。 - 使用
@前缀可调用已定义的 Composer 命令别名(如 Laravel 的@php artisan)。
2. 使用自定义 PHP 类处理更复杂逻辑
对于需要更复杂控制逻辑的情况,可以编写一个 PHP 类来处理钩子事件。
先在 composer.json 中注册类方法:
{
"scripts": {
"pre-install-cmd": [
"MyScripts\\Build::preInstall"
]
}
}
然后创建对应的 PHP 文件,例如 scripts/Build.php:
getIO();
$io->write('正在执行前置检查... ');
if (!is_writable('vendor')) {
$io->writeError('vendor 目录不可写! ');
exit(1);
}
}
}
确保 Composer 能加载该类,可通过 autoload 注册命名空间:
"autoload": {
"psr-4": {
"MyScripts\\": "scripts/"
}
}
记得运行 composer dump-autoload 更新自动加载映射。










