post-install-cmd仅在vendor不存在或为空、composer.lock缺失或不匹配、且未加--no-scripts时触发;必须配置在composer.json顶层scripts下,键名严格为"post-install-cmd",否则静默失效。

post-install-cmd 为什么没运行
它根本不会在你每次敲 composer install 时都跑。只有三种情况同时满足才会触发:项目根目录下没有 vendor/ 或该目录为空;composer.lock 缺失,或内容与 composer.json 中声明的依赖不一致;命令没加 --no-scripts。本地反复执行没反应?大概率是 vendor 已存在,Composer 直接跳过初始化流程。此时应改用 post-update-cmd,或先 rm -rf vendor composer.lock 再重试。
scripts 字段必须写在哪儿
scripts 必须定义在项目根目录 composer.json 的顶层,不能嵌套在 extra、autoload 或其他字段里。键名必须严格为 post-install-cmd(注意后缀 -cmd),写成 post_install_cmd、post-install 或 PostInstall 都会静默失效。值可以是字符串(单条命令)、字符串数组(顺序执行)或关联数组(带 script 和 description),但数组形式更安全,避免 shell 解析空格和引号歧义。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
脚本里该用 PHP 还是 shell 命令
优先用带解释器前缀的 shell 命令,比如 "php artisan config:clear" 而不是 "artisan config:clear"。不要写裸 cp、chmod 等命令——它们在 Windows 上直接失败。PHP 类方法调用(如 "MyPackage\Installer::run")可行,但必须确保类已通过 autoload 正确注册,且不能依赖尚未完成安装的包(post-install-cmd 执行时 vendor/autoload.php 可能还没完全就绪)。跨平台兼容性差的命令(如 chown)建议封装进 PHP 脚本里处理。
部署机上脚本常因权限和环境挂掉
脚本运行时的用户是执行 composer install 的人,未必等于 Web 服务器用户,storage/ 权限不一致会导致 Permission denied。别用相对路径操作文件,统一用 ${PWD}/storage 显式锚定。生产环境部署时默认禁用脚本,需显式加 --no-dev --optimize-autoloader,但千万别漏掉 --no-scripts —— 否则开发期写的清理缓存脚本可能在线上误触发。真正关键的部署动作(如生成配置、设权限)建议拆成独立脚本名(如 deploy:setup),用 composer run-script deploy:setup --no-dev 显式调用,可控性更强。
post-install-cmd 不是“安装完就跑”,而是“从零重建依赖时才跑”;而很多线上部署流程其实走的是 composer update 或增量安装,这时候得靠 post-update-cmd 或手动触发。










