pre-install是Composer 2.2+唯一合法安装前钩子,需写为"pre-install"(无-cmd后缀),触发时vendor为空,不可require autoload.php;pre-install-cmd已被彻底移除,配了也静默忽略。

pre-install 钩子在中文镜像下为何不执行
不是镜像导致的,是钩子本身没配对——pre-install-cmd在 Composer 2.2+ 已被彻底移除,配了也静默忽略。你唯一能用的合法安装前钩子是 pre-install(无 -cmd 后缀)。
它触发时 vendor/ 还是空的,所以不能 require 'vendor/autoload.php',也不能调用 phpstan 或 phpcs 这类还没装进 PATH 的 CLI 工具。
- 错误写法:
"pre-install-cmd": ["MyBuild::beforeInstall"]→ 不报错、不执行 - 正确写法:
"pre-install": ["echo 'checking env'", "MyBuild::beforeInstall"] - 验证方式:加
-v运行composer install,看到Executing script MyBuild::beforeInstall才算到位
post-install-cmd 在中文镜像下几乎不触发
很多人以为换完镜像后 composer require 会走 post-install-cmd,其实不会。这个钩子只在两种场景下跑:composer install 且 composer.lock 不存在,或内容过期需重生成(比如删了 lock 文件再装)。
composer require 实质是先改 composer.json,再执行 composer update some/package,触发的是 post-update-cmd,不是 post-install-cmd。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 首次
composer install→ 触发post-install-cmd -
composer require xxx→ 触发post-update-cmd -
composer install(vendor/和lock完全匹配)→ 默认不触发任何脚本
post-update-cmd 和 post-autoload-dump 的执行时机差异
中文环境下常因 autoload 未就绪导致类找不到,根源在于没分清这两个钩子的先后顺序:
post-update-cmd 在依赖解包完成后立即执行,但此时 vendor/autoload.php 可能还没重建;post-autoload-dump 必须等 autoloader 刷完才触发,所以它一定在 post-update-cmd 之后,且只要 autoload 有更新就必跑。
- 想 new 新装包里的类?别在
post-update-cmd里直接实例化,改用post-autoload-dump -
post-autoload-dump也会响应composer dump-autoload,适合做纯 PHP 初始化(如注册自定义加载器) - PHP 方法必须声明为
public static,且所在类需在autoload-dev下注册(不是autoload)
中文镜像不影响钩子执行逻辑,但影响依赖解析阶段
镜像只加速下载,不改变钩子触发规则,也不加速“Resolving dependencies”阶段。如果你发现换阿里云/腾讯云镜像后 composer install 卡在解析环节,大概率是以下原因:
-
composer.json中"php": "^8.1"但本地是 PHP 8.0,Resolver 会假装运行在 8.1 下穷举,结果无解 - 镜像元数据延迟(如 packages.json 更新滞后数小时),导致 Resolver 拿到过期版本约束
- 中文路径或项目名含空格,极少数情况下触发 Composer 内部异常,建议先
cd到纯英文路径下重试
真正容易被忽略的点:钩子是否执行,和镜像无关;但解析失败后根本走不到钩子这一步——卡在 Resolving dependencies 就意味着后续所有脚本都不会启动。

















