pre-install-cmd 是唯一能在 composer install 拉取包前执行的钩子,因它在依赖解析完成、尚未下载解压包时触发,可中止安装避免环境污染;其他钩子均发生在安装流程后期或不相关场景。

pre-install-cmd 是唯一能在 composer install 开始拉取包之前执行的钩子,其他事件如 post-install-cmd 或 pre-autoload-dump 都太晚,起不到“前置清理”作用。
为什么必须用 pre-install-cmd?
它在依赖解析完成、但尚未下载或解压任何包时触发,是唯一能干预安装流程起点的时机。如果脚本返回非零退出码(比如环境检查失败),composer install 会直接中止,避免后续操作污染环境。
-
pre-update-cmd只对composer update生效,和install无关 -
post-install-cmd已经装完所有包,再清理为时已晚 -
pre-autoload-dump发生在自动加载文件生成阶段,此时 vendor 目录早已写入
pre-install-cmd 的配置写法
直接在 composer.json 的 "scripts" 字段里定义数组即可,支持 shell 命令、PHP 脚本路径,或 Composer 内置命令别名:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"scripts": {
"pre-install-cmd": [
"php scripts/clean-tmp.php",
"rm -rf storage/cache/*",
"echo '✅ 清理完成,即将开始安装'"
]
}
- 脚本路径必须可访问,Linux/macOS 下需确保
scripts/clean-tmp.php具有可执行权限(chmod +x) - Windows 用户若用 PHP 脚本,建议显式写成
php scripts/clean-tmp.php,避免系统找不到解释器 - 多个命令按数组顺序依次执行,任一失败(非零退出)即中断整个
composer install
常见错误:脚本不执行或报错
最常踩的坑不是语法,而是执行上下文和权限问题:
- 误把脚本写在
"post-install-cmd"或"scripts"顶层(非事件键下),导致完全不触发 - PHP 脚本里用了相对路径(如
file_get_contents('config.yaml')),实际工作目录是项目根目录,但脚本可能被从 vendor/bin 下调用,路径失效 - 脚本中调用了未声明的扩展(如
mbstring),而pre-install-cmd运行时 autoload 尚未生成,无法靠 Composer 自动加载类,只能靠原生函数或手动require - 在 CI 环境中,
rm -rf类命令可能因权限不足静默失败,建议加set -e或用php -r "if (!is_writable(...)) die('no write');"显式校验
post-install-cmd 更稳。混淆时机,脚本就只是个摆设。










