post-install-cmd并非每次composer install都执行,仅当composer.lock不存在或与composer.json不一致(即被判定为“过期”)时触发;若lock文件有效且依赖未变,则静默跳过。

post-install-cmd 不是每次 composer install 都会执行
它只在 composer.lock 不存在、或被 Composer 判定为“过期”(即与 composer.json 中的 require 不一致)时触发。换句话说:如果项目已有有效的 composer.lock,且你只是运行 composer install 解包已锁定的依赖,post-install-cmd 根本不会跑。
常见误判场景:
- 本地开发时反复删
vendor再install,以为脚本总该执行——实际只有第一次(生成 lock)或改了composer.json后才触发 - CI/CD 流程里缓存了
composer.lock,但没同步更新,导致部署时脚本静默跳过 - 误把迁移或权限设置逻辑全塞进
post-install-cmd,上线后发现数据库没迁、目录没赋权
什么时候该用 post-update-cmd 而不是 post-install-cmd
如果你需要「每次依赖变动后都执行」(比如 php artisan migrate 或 php artisan config:clear),post-update-cmd 更可靠——它在 composer update 和 composer install --update 时都会触发,且不依赖 lock 文件状态。
典型配置差异:
-
post-install-cmd:适合首次初始化动作,如生成密钥(php artisan key:generate --force)、创建初始配置模板 -
post-update-cmd:适合持续维护动作,如迁移(php artisan migrate --force)、生成 IDE 辅助文件(php artisan ide-helper:generate) - 想强制每次
install都跑?只能手动加--no-cache+--ignore-platform-reqs并配合post-update-cmd,或直接写成自定义脚本显式调用
脚本失败会导致 install 中断吗?
不会。post-install-cmd 是“事后钩子”,即使其中某个命令返回非零退出码(比如迁移失败、权限设置报错),composer install 本身已完成,不会回滚 vendor 或中断流程。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
但要注意:
- 多个命令按顺序执行,前一个失败不影响后一个运行(除非用
&&连接) - Laravel 等框架的 Artisan 命令默认交互式,生产环境必须加
--no-interaction或--force,否则卡住 - 路径问题:脚本中调用
php artisan时,当前工作目录是项目根目录,但若用相对路径写 bin 文件(如./bin/do-something),需确保权限可执行且路径正确
pre-install-cmd 才真正能拦住 install
如果你需要前置校验(比如检查 PHP 版本、必需扩展是否启用、.env 是否存在),应该用 pre-install-cmd。它在依赖解包前运行,且任意脚本返回非零退出码,整个 composer install 就会中止。
示例安全检查:
-
php -v | grep -q "8\.1"(确认 PHP 版本) -
php -m | grep -q mbstring(验证扩展) [ -f .env ] || { echo "Missing .env"; exit 1; }
这类判断放在 post-install-cmd 里毫无意义——依赖已经装完了,出错也晚了。

















