composer脚本执行顺序由事件类型和注册方式严格控制,不依赖scripts数组键序;同一事件下按composer.json中值的顺序执行,不同事件按预设硬编码顺序触发。

Composer 脚本的执行顺序不是靠“配置顺序”决定的,而是由事件类型和注册方式严格控制;手动调整 scripts 数组里键的书写顺序完全无效。
Composer 脚本按事件触发,不按 JSON 键序执行
很多人误以为把 post-install-cmd 写在 pre-autoload-dump 前面,就会先执行前者——其实不会。Composer 会收集所有绑定到同一事件的脚本,然后按注册顺序(即 composer.json 中出现的先后)执行,但前提是它们属于同一个事件名。
- 不同事件之间有硬编码的触发顺序,比如
pre-install-cmd→install-cmd→post-install-cmd→pre-autoload-dump→post-autoload-dump - 同一事件下多个脚本,才按
composer.json中数组值的排列顺序执行 - 使用
"scripts": {"post-install-cmd": ["@php script1.php", "@php script2.php"]}这种写法,顺序才真正生效
如何让多个操作严格串行且可控
当需要确保 A → B → C 执行(比如生成配置 → 清缓存 → 重启队列),不能依赖多个事件拼凑,而应归入单个事件中统一调度。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用数组形式内联多个命令:
"post-install-cmd": ["@php bin/generate-config.php", "@php bin/clear-cache.php", "php artisan queue:restart"] - 避免混合使用脚本别名(如
@dev)和原始命令,别名展开后可能破坏预期顺序 - 若逻辑复杂,建议封装为独立 PHP 脚本,再通过
"post-install-cmd": "php scripts/deploy.php"调用,便于调试和复用
常见顺序错乱现象与排查方法
执行 composer install 后发现缓存没清、配置没写入、或 autoload 没更新,大概率是脚本绑错了事件,而非顺序写反了。
-
Class not found错误常因脚本在post-install-cmd中生成类,却未触发post-autoload-dump—— 此时应改用post-autoload-dump或显式调用composer dump-autoload - 本地运行正常、CI 失败,可能是 CI 使用了
--no-scripts或--no-autoloader,导致部分事件根本没触发 - 用
composer run-script手动执行某脚本时,它不带任何上下文事件链,也不会自动连带触发前后事件
最易被忽略的一点:Composer 的事件顺序是固定写死在源码里的(见 src/Composer/EventDispatcher/EventDispatcher.php),任何试图用“重命名事件”或“插入空脚本占位”来干预顺序的做法,都会失效或引发不可预测行为。










