作曲家和第三方错误


Composer and third party bugs

在开发Symfony2项目时,我经常遇到第三方捆绑包中的错误。大多数时候,错误很微妙,但很难找到。例如,仅在本周,我就发现了三个错误,其中使用简单的if ( $value )结构测试了值,但需要使用( $value !== null)( $value !== false )

如果没有相关项目的相关 github 页面的足够权限,我能做的最好的事情就是推送拉取请求。合并请求通常需要相当长的时间。同时,特别是在使用主版本时,其他拉取请求被合并,这反过来又导致作曲家更新。发生这种情况时,任何本地错误修复都将恢复为原始代码。

有什么方法可以处理这种情况吗?

理想情况下,我希望更新第三方捆绑包,但保留我的修改。当然,直到拉取请求被合并。

有一个项目允许您在使用作曲家下载软件包后应用补丁。它被创建用于Drupal项目,但我相信它也应该与您自己的补丁一起使用。

https://github.com/jpstacey/composer-patcher

否则,您可以分叉

项目,进行改进,提交拉取请求,同时在 compator 中使用您自己的分叉存储库。请参阅[此答案][https://stackoverflow.com/a/14637668/3492835)以获取有关如何实现这一目标的详细说明。

编辑:
明星们说现在是2016年,有些事情发生了变化。 jpstacey/composer-patcher被认为是不推荐使用的,有利于netresearch/composer-patches-plugin项目。这是一个作曲家插件,它的功能基本相同,但它也能够应用本地补丁。

Composer 不支持此功能。原因很简单,不应该使用其他库的开发版本。但不要害怕,您可以通过在 GitHub 上分叉项目来轻松解决此问题。当然,这意味着很多开销,但这是我能想到的最佳解决方案,你可以用它来解决这个问题。

请注意,与修补程序方法相比,此方法有几个优点:

  1. 您可以直接从分叉创建拉取请求。
  2. git 合并过程将识别任何冲突。

自动执行此过程的脚本很简单:

#!/bin/sh
git fetch upstream
git checkout master
git merge upstream/master

您可以创建一个 Composer 更新/安装后脚本,该脚本在每个项目本地目录中执行这些命令(如果它是您的分支之一)。(我把这个实现部分留给读者。但是需要先在本地创建存储库,因为 Composer 只下载最新的文件而没有存储库数据。这可能会向项目添加巨大的.git文件夹,因为有些项目很大。