Composer本身不处理补丁,必须安装cweagans/composer-patches插件并在项目根composer.json的extra.patches中正确配置补丁路径,且需删除vendor和composer.lock后重新install才能生效。

Composer 本身不处理补丁 —— 你改了 vendor/ 下的文件,下次 composer install 就会被清掉;你在 composer.json 里写了 extra.patches 却没生效,大概率是插件没装、配置位置错,或补丁格式不合规。
必须先装 cweagans/composer-patches 插件
没这个插件,extra.patches 就是纯文本,完全不会触发任何操作。
- 运行
composer require --dev cweagans/composer-patches:^1.7(推荐 v1.7+,兼容 Composer 2.x) - 插件安装后自动注册,无需手动启用或修改
autoload - 如果之前已运行过
composer install,必须删掉vendor/和composer.lock再重装,否则缓存包跳过补丁应用阶段 - 全局配置如
composer config --global store-auths false可能干扰插件读取本地composer.json,临时取消再试
extra.patches 配置必须写在项目根 composer.json 里
写在子模块、私有包或 repositories 定义里,插件根本看不到。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 键名必须是标准包名格式:
"monolog/monolog",不能写成"./vendor/monolog/monolog"或"monolog" - 值必须是对象,每个子键是补丁描述(仅日志显示用),值是补丁路径或 URL:
"Fix null coalesce": "patches/monolog-null-coalesce.patch" - 路径是相对于
composer.json的 ——patches/xxx.patch表示文件就在项目根目录下;patches/monolog-fix.patch表示在patches/子目录 - 路径含空格或中文?
json_decode解析会失败;用短横线命名最稳妥,如laravel-session-race.patch
补丁文件必须是 LF 换行、无前缀的 POSIX diff 格式
不是所有 .diff 都能用。常见失败原因:补丁头路径不对、换行符是 CRLF、hunk 偏移错位。
- 生成补丁时,务必从干净的包源码目录执行:
git diff --no-prefix origin/main src/Helper.php > patches/fix-helper.patch - 确认补丁用的是 Unix 换行符(LF):
file patches/*.patch应输出不含with CRLF line terminators的提示 - 补丁内路径必须匹配包解压后的结构,例如
src/Helper.php,不是vendor/monolog/monolog/src/Helper.php - 提前校验:
git apply --check patches/xxx.patch,无输出才表示可安全应用 - 远程补丁(如 GitHub PR 的
.patch链接)也支持,但需确保链接返回的是 raw 内容
补丁没应用?先看这三件事
运行 composer install -v,搜索输出里的 Applying patches for 行:
- 没这行 → 插件没加载:确认是否执行过
composer require --dev cweagans/composer-patches - 有这行但没你的包 → 键名拼写错误,比如大小写不符,或用了
laravel/framework却实际锁的是laravel/framework-dev - 有这行但报
error: patch failed: src/Logger.php:123→ 版本不匹配导致 hunk 偏移失败;可加"revert": true绕过,或进vendor/xxx/package用当前代码重做 patch
最容易被忽略的是:补丁只在首次安装或更新时触发,且严格依赖 composer.lock 中记录的包版本与补丁生成时的源码状态一致。一旦版本漂移,hunk 偏移就容易失效,而这种问题往往在 CI 环境里才暴露出来。

















