在作曲家依赖中使用包分叉

Posted

技术标签:

【中文标题】在作曲家依赖中使用包分叉【英文标题】:Use a package fork in a composer dependency 【发布时间】:2015-02-27 03:39:18 【问题描述】:

我正在开发一个 laravel 包(我们称之为包 A),它需要另一个包(包 B https://github.com/dropbox/dropbox-sdk-php)。

我已经创建了包 B (https://github.com/EmilioBravo/dropbox-sdk-php) 的分支,在新分支“fix64”中进行了一些更改,并将我的 GitHub 存储库添加为包 A 的 composer.json 中的存储库,如作曲家文档中所示:

"repositories": [
    
        "type": "vcs",
        "url": "https://github.com/EmilioBravo/dropbox-sdk-php"
    
],
"require": 
    "php": ">=5.4.0",
    "illuminate/support": "4.2.*",
    "dropbox/dropbox-sdk": "dev-fix64"
,

如果我从包 A 中调用 composer update 它会正确下载我的 fork,但是,如果我在另一个项目(项目 C)中使用包 A 作为依赖项并从中调用 composer update,composer 说它找不到开发修复64。

问题 1

- emilio-bravo/platform dev-dropboxfix requires dropbox/dropbox-sdk dev-fix64 -> no matching package found.

emilio-bravo/platform dev-dropboxfix 需要 dropbox/dropbox-sdk dev-fix64 -> 找不到匹配的包。

emilio-bravo/platform dev-dropboxfix 的安装请求 -> emilio-bravo/platform[dev-dropboxfix] 可满足。

只有当我将我的 repo 作为存储库添加到项目 C composer.json 中时,它才会找到我的 fork 分支。

我发现的另一种方法是将我的 fork 克隆到满足存储库中。

但感觉不对。如何让作曲家从 GitHub 找到我的 fork?

【问题讨论】:

您有没有找到有效的解决方案?我遇到了完全相同的问题。 How to require a fork with composer的可能重复 【参考方案1】:

将自定义存储库添加到主项目是让 Composer 了解新源的唯一方法。

它是故意这样做的,因为否则 repos 可以添加 repos 可以添加 repos...而不保证有一个有限的 repos 列表。

此外,添加一个 repo 并没有说明可以在那里找到哪些软件,Composer 将扫描每个标签和分支。从理论上讲,存储库可以为完全不同的知名包创建另一个分支,提供更新的版本,并添加一些恶意行为。

总体而言,Composer 似乎非常适合防止远程代码执行,但不知情的人会做出错误的决定除外。

因此,如果您在 packagist.org 上发布的包中发现错误,对每个人来说最好的方法是提出拉取请求。第二种最好的方法是以新名称分叉项目并将其发布在 packagist.org 上。使用具有相同项目名称的分叉存储库修补问题并将 Composer 指向它是最糟糕的解决方案,通常仅适用于您自己项目的依赖项。

【讨论】:

以上是关于在作曲家依赖中使用包分叉的主要内容,如果未能解决你的问题,请参考以下文章

从编辑器中排除包更新

如何知道 Laravel 包需要哪些作曲家依赖项?

识别提交的作曲家包的版本?

作曲家无法加载包无效的版本字符串

我可以用作曲家拉一个特定的提交吗?

编辑在 composer 中管理的多个 PHP 包