composer run-script --list 只显示 composer.json 中 scripts 字段显式定义的脚本名,不显示未绑定的内置事件;需用 composer show --events 查看全部生命周期事件。

composer run-script --list 显示不了事件?先确认是否在项目根目录
执行 composer run-script --list 时空白或报错,大概率是因为当前不在含 composer.json 的项目根目录。Composer 脚本是项目级配置,不支持全局扫描。
- 用
ls composer.json或dir composer.json确认文件存在 - 如果在子目录(如
src/),cd ..回到上层再试 - Windows 下注意路径大小写不影响,但 PowerShell 有时会缓存旧路径,建议新开终端
为什么 --list 不显示自定义脚本?检查 composer.json 的 scripts 字段
composer run-script --list 只列出 composer.json 中 scripts 对象下定义的键名,不会自动发现函数、命令或 vendor 里的钩子。
- 确保
composer.json里有类似这样的结构:"scripts": { "dev-start": "php -S localhost:8000 -t public", "test": "vendor/bin/phpunit" } - 键名(如
dev-start)才是事件名,值只是执行命令,不参与列表展示 - 如果
scripts是空对象{}或根本不存在该字段,--list就只显示内置事件(如post-install-cmd)——但前提是没被禁用
内置事件(如 post-autoload-dump)为什么没出现在 --list 输出里?
composer run-script --list 默认只显示「显式定义」的脚本,不主动枚举 Composer 内置生命周期事件,除非你在 scripts 里手动绑定了它们。
- 想触发
post-autoload-dump,得先在composer.json里写:"scripts": { "post-autoload-dump": "echo 'Autoload updated'" } - 否则它只是后台默默运行的钩子,不会出现在
--list结果中 - 完整内置事件列表见 Composer 官方文档,但记住:没绑定 = 不可见 = 不能用
run-script直接调
想快速查所有可用事件名,用 composer show --events
composer run-script --list 功能有限,真正想看“哪些事件能被监听”,应该用更直接的命令:
-
composer show --events会列出全部内置事件(包括pre-install-cmd、post-update-cmd等),按阶段分组,清晰明确 - 这个命令不要求项目有
scripts,也不依赖当前目录是否有composer.json(只要已安装 Composer) - 注意:它不显示你自定义的脚本名,只管生命周期事件;而
run-script --list正好相反
两个命令互补,不是替代关系。搞混这点,就容易以为“没事件”或者“脚本失效”。










