补丁不生效需先确认cweagans/composer-patches是否已安装,它非composer原生功能,未安装则extra.patches配置无效;必须通过composer require --dev cweagans/composer-patches:^1.7显式安装,并确保配置位于项目根目录composer.json的extra.patches中,路径相对该文件,补丁格式为lf换行、无前缀的git diff,且需删除vendor和composer.lock后重装才能触发应用。

补丁不生效?先确认插件装没装
绝大多数“补丁没反应”的问题,根源就在这一步:没装 cweagans/composer-patches。它不是 Composer 内置功能,不显式安装,extra.patches 配置就是纯文本。
必须运行:
composer require --dev cweagans/composer-patches:^1.7
装完检查 composer.json 的 require-dev 里是否真有这一行;别用 composer global require,对当前项目完全无效。
extra.patches 配置写在哪才有效
插件只读取你项目根目录下的 composer.json,其他位置全被忽略:
- 子模块自己的
composer.json→ 不触发 - 私有包仓库里定义的包,其
composer.json中的patches→ 插件看不见 - 键名必须是标准包名:
"monolog/monolog",不能是"./vendor/monolog/monolog"或"Monolog\Monolog" - 值必须是对象或数组:单个补丁可用字符串(
"Fix null check": "patches/xxx.patch"),多个必须用数组 - 路径是相对于
composer.json的:写"patches/xxx.patch",就得把文件放项目根下的patches/目录里
patch 文件格式错一个字就失败
插件底层调用系统 patch 命令,对格式极度敏感。90% 失败源于两点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
路径前缀不匹配:补丁里得是
src/Logger.php,不是a/src/Logger.php或vendor/monolog/monolog/src/Logger.php—— 必须和vendor解压后的实际结构一致 -
换行符不是 LF:Windows 默认 CRLF,
patch直接报can't find file to patch;用file patches/*.patch检查,输出含with CRLF line terminators就得转 - 最稳生成方式:进到
vendor/monolog/monolog目录改完,运行git diff --no-prefix > ../../patches/monolog-fix.patch - 提前校验:在项目根运行
git apply --check patches/monolog-fix.patch,无输出才表示可安全应用
为什么删 vendor 和 lock 才能触发补丁
Composer 缓存已安装包,如果之前跑过 composer install,它会跳过 patch 阶段直接复用 vendor 里的内容。
必须执行:
rm -rf vendor composer.lock<br>composer install
只有从零开始安装,插件才有机会介入并应用补丁。这点容易被忽略——很多人改完配置、补丁文件后只跑 composer update,结果补丁根本没走。
真正关键的不是“怎么写”,而是“什么时候重装”:补丁类变更属于破坏性操作,必须清缓存重建环境才可靠。










