post-autoload-dump 是在自动加载文件更新时触发的钩子,即 vendor/autoload.php 或类映射重建时执行,覆盖 composer install/update/dump-autoload 等场景,比 post-install-cmd 更稳定可靠。

post-autoload-dump 是什么时机触发的
它不是“安装完就跑”,而是“自动加载文件一更新就跑”——只要 vendor/autoload.php 或优化后的类映射被重写,这个钩子就一定会执行。这意味着:composer install、composer update、甚至只是 composer dump-autoload(哪怕没改依赖),只要 autoload 生成逻辑走了一遍,它就触发。
- ✅ 触发场景:新增/删包、切换 Git 分支导致
composer.json变更、手动运行dump-autoload、修改autoload配置后重装 - ❌ 不触发场景:
composer install在已有vendor/且composer.lock完全未变时,可能跳过 autoload 重建 → 此时post-autoload-dump也不会执行 - ⚠️ 注意:它比
post-install-cmd更稳定——后者只在“真正安装依赖”时才跑,而前者覆盖了绝大多数开发者实际需要清理/重建的时刻
怎么在 composer.json 里配才有效
必须严格写在 scripts 下,键名拼写一个字母都不能错;值可以是命令字符串、命令数组,或 PHP 方法回调。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 命令数组最常用,按顺序执行,任一失败则中断后续:
"post-autoload-dump": ["@clean", "echo "✅ Done""] - PHP 回调需满足三个条件:类已通过
autoload或autoload-dev加载、方法为public static、签名可选接收ComposerScriptEvent对象 - 别写成
"post-autoloader-dump"或"post-autoload"—— 这些名字 Composer 根本不认识,静默忽略 - Windows 用户慎用
rm -rf;推荐统一用 PHP 脚本或del /q+rmdir /s /q组合,避免 CI 环境报错
为什么推荐用它做清理而不是 post-install-cmd
因为真实开发中,“需要清理”的动作往往和“类是否能被自动加载”强相关,而不是和“有没有新包装进来”绑定。
- Laravel 框架缓存(如
bootstrap/cache/config.php)必须在 autoload 更新后清,否则新配置不生效 - Symfony 的
var/cache目录下有类缓存,autoload 结构变了但缓存没清,会报Class not found - 你加了一个新 Service 并注册到容器,但没清缓存?
post-install-cmd可能根本没跑,而post-autoload-dump一定跑了 -
post-install-cmd在composer install --no-scripts下会被跳过;post-autoload-dump同样受控于该参数,但它更常被需要,所以建议把关键清理逻辑放这里
PHP 回调写法及常见报错
回调不是黑盒魔法,它依赖 Composer 已完成 autoloader 初始化 —— 所以你不能在回调里再 require 'vendor/autoload.php',否则可能破坏命名空间解析。
- 类必须能被自动加载:比如放在
src/Scripts/PostAutoloadDump.php,并在autoload-dev中声明:"autoload-dev": { "psr-4": { "Scripts\": "src/Scripts/" } } - 方法示例:
public static function clearCache(ComposerScriptEvent $event) { exec('php artisan cache:clear 2>/dev/null'); } - 典型错误:
Call to undefined method ScriptsPostAutoloadDump::clearCache()→ 类没加载,或方法非 static,或拼写不一致 - 调试技巧:加
-v参数运行composer dump-autoload -v,看输出里有没有Executing script Scripts\PostAutoloadDump::clearCache
exec(),或 Docker 容器里没装 php CLI,此时回调里的 artisan 命令就会静默失败。得配合日志或退出码检查,不能只靠它“自动”兜底。

















