post-root-package-install在composer create-project创建项目后触发,用于执行初始化操作。它在目标目录创建、项目代码解压、根composer.json就位后立即运行,但依赖尚未安装。可在项目模板的composer.json中定义脚本,如运行init.php、生成.env文件、删除示例内容、创建目录结构或输出提示信息。该事件仅在create-project时触发一次,区别于post-install-cmd(每次install都触发)和post-update-cmd。旧名称post-create-project-cmd已被弃用。正确使用此钩子可提升项目模板自动化水平。

Composer 的 post-root-package-install 是一个内置的脚本事件,它在使用 composer create-project 创建项目完成后自动触发。这个事件专门用于在新项目根目录下安装完主包(即你创建的项目)之后,执行一些初始化操作,比如生成配置文件、清理示例内容或提示用户下一步操作。
什么时候触发?
该事件仅在运行 composer create-project 命令时被触发,且发生在以下流程中:
- 目标目录已创建
- 项目代码从源(如 packagist)下载并解压
- 依赖项尚未安装(
composer install还没执行) - 根项目的
composer.json已就位 - 此时触发
post-root-package-install
如何使用它?
在你的项目模板(即作为 create-project 目标的项目)的 composer.json 中添加脚本:
{
"name": "your-vendor/project-template",
"type": "project",
"scripts": {
"post-root-package-install": [
"@php scripts/init.php",
"echo 'Project initialized successfully!'"
]
}
}
上面的例子会在项目创建后运行 scripts/init.php 脚本,并输出提示信息。你可以用它来做这些事:
- 重命名或填充 .env 文件
- 删除不需要的安装向导文件
- 生成密钥(如 Laravel 的 APP_KEY)
- 创建目录结构
- 显示帮助文档链接
与其它事件的区别
注意不要混淆以下几个常见事件:
- post-create-project-cmd:旧名称,已被弃用,等同于 post-root-package-install
-
post-install-cmd:每次运行
composer install都会触发,包括依赖安装时,不专属于 create-project -
post-update-cmd:运行
composer update后触发
如果你希望脚本只在首次创建项目时运行,就必须使用 post-root-package-install,而不是通用的 post-install-cmd。
基本上就这些。合理利用这个钩子,可以极大提升项目模板的自动化体验。










