装不上 composer-patches 首先确认 Composer 与插件版本匹配:Composer 1.x 用 ^1.7,2.2+ 用 ^2.0;补丁路径须在 extra.patches 中显式声明、相对 composer.json;确保 LF 换行、无空格;验证需清缓存重装并查看 -v 输出。

composer-patches 装不上?先确认 Composer 版本和插件兼容性
装 cweagans/composer-patches 失败,十有八九是 Composer 版本不匹配。它 1.x 版本只支持 Composer 1.x,而 Composer 2.x 默认不兼容——哪怕你用 composer require cweagans/composer-patches 看似成功,后续打补丁也会静默失效。
- Composer 2.2+ 用户必须用
cweagans/composer-patches2.x(目前最新是2.4.0),安装命令为:composer require cweagans/composer-patches:^2.0 - 如果项目锁定了 Composer 1.x(比如某些旧 CI 环境),别硬升插件,直接降级插件到
^1.7更稳妥 - 运行
composer --version和composer show cweagans/composer-patches双查版本,比看报错更准
补丁文件放哪?路径写错就根本不会触发
补丁不会自动扫描项目根目录下的 .patch 文件。它只认 extra.patches 配置里明确写的路径,且路径是相对于 composer.json 位置的——不是相对于包根目录,也不是相对于当前 shell 路径。
- 推荐把补丁统一放在
patches/子目录下,例如:patches/laravel-validation-bugfix.patch - 配置里必须写完整相对路径:
"patches": {"laravel/framework": {"Fix validation null check": "patches/laravel-validation-bugfix.patch"}} - 路径含空格或特殊字符?别试,会解析失败;用短横线命名最安全
- 补丁文件本身得是 Unix 换行符(LF),Windows 的 CRLF 可能导致应用时崩溃,用
file patches/*.patch确认
补丁没生效?检查是否被 vendor 重写或缓存干扰
composer install 或 composer update 后补丁没进 vendor,常见原因是:包已存在、缓存未清、或者 patch 配置在错误的 composer.json 里(比如配在了子模块而非根项目)。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 删掉
vendor/和composer.lock,再跑composer install——这是最干净的验证方式 - 加
-v参数看详细输出:composer install -v,搜索Applying patches行,没这句就是配置没加载 - 如果用了
composer config --global store-auths false类全局设置,可能干扰插件读取本地配置,临时取消再试 - 某些私有包通过
package类型定义在repositories里,这种包默认不支持补丁,得显式加"type": "package"并确保dist指向可 patch 的源码结构
补丁冲突或逆向失败?别依赖 composer update 自动回滚
补丁不是 Git 分支,没有“撤销”概念。一旦目标包升级导致 hunk 失败,composer update 不会提示、也不会跳过,而是直接中断并留一个半打补丁的脏目录——这时 vendor 里的文件可能已损坏,但 composer 不报错。
- 每次更新关键依赖前,先手动跑一遍:
composer update --dry-run,观察补丁是否仍能匹配 - 补丁内容尽量窄:只改必要几行,避免跨函数大块替换;用
diff -U1生成最小上下文,提高兼容性 - 不要把补丁逻辑塞进
post-install-cmd脚本里试图“兜底”,插件本身已负责时机控制,重复操作反而易出竞态 - 线上部署时,补丁失败不会触发非零退出码(默认行为),需加
--no-interaction --verbose并 grep 日志判断是否真正应用成功
补丁本质是临时止血,不是长期方案。真正要命的是:没人定期检查补丁是否还贴合上游代码——这点比语法或路径问题更常被忽略。

















