【问题标题】:Composer: Package that extends another from a forkComposer:从 fork 扩展另一个包
【发布时间】:2015-08-23 12:59:56
【问题描述】:

我有以下情况:GitHub和Packagist上有包author/package1。我决定将其 fork 到 tcb13/package1 以添加一些代码(最终将合并到原始项目中,但这需要时间)。

后来,我开发了另一个包 tcb13/package1-extension,它通过将一些方法继承到新类中来扩展了 fork tcb13/package1...

在我的tcb13/package1-extensioncomposer.json 我写道:

{
    "name": "tcb13/package1-extension",
    "description": "...",
    "keywords": [

    ],
    "homepage": "https://github.com/tcb13/package1-extension",
    "license": "MIT",
    "authors": [

    ],
    "repositories":
    [
        {
            "type": "vcs",
            "url": "https://github.com/tcb13/package1/"
        }
    ],
    "require": {
        "author/package1": "dev-master"
    },

我告诉作曲家我的扩展包需要author/package1,并且还有一个附加存储库https://github.com/tcb13/package1/,并将包版本设置为dev-master,所以作曲家将从我修改后的fork下载author/package1,而不是原来的包...(如果我告诉它从tcb13/package1 下载它就行不通了)。

我把上面的代码提交到 GitHub 并尝试在一个新项目上要求 tcb13/package1-extension,composer 是这样说的:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for tcb13/package1-extension dev-master -> satisfiable by tcb13/package1-extension[dev-master].
    -  tcb13/package1-extension dev-master requires `author/package1` dev-master -> no matching package found.

为什么会出错?当我开发我的扩展包时,我能够将 author/package1 要求为 dev-master,因为它指向了我的 fork repo,但是当我尝试 require tcb13/package1-extension 时,它似乎没有寻找我的 fork 并试图去原来的项目找分支……为什么?

另外,这是我应该使用分叉作为依赖项的方式吗?还有其他方法吗?我最初尝试将 fork 要求为 tcb13/package1,但它会失败,但要求它为 author/package1 也告诉作曲家我有一个额外的存储库工作到现在。

谢谢。

【问题讨论】:

  • 你是不是把composer.json里面的tcb13/package1的名字改了?
  • 其实在tcb13/package1composer.json 我没碰过name变量,应该是吧?
  • 不,你不应该。对于在原始包中被接受为拉取请求的简单修复程序,您可以在新版本之前生存。
  • 那么,为什么它不起作用?为什么我可以在 tcb13/package1-extension 处要求分叉,但是当我尝试在另一个项目中要求 tcb13/package1-extension 时却无法获得分叉?它应该总是失败或永远不会失败......不要在一个工作中失败,在另一个失败。

标签: git dependencies fork composer-php


【解决方案1】:

我设法解决了这个问题。根据作曲家文档,这不是错误,这是由于安全性而设计的。

来自 GitHub comment

考虑一下:你有一个项目依赖于我的一个包。 我依赖于对您的应用程序至关重要的包。我发生 进行分叉以引入新功能并意外标记 与我的 composer.json 中的存储库一起发布。你碰巧更新 你的包裹,拿到我的叉子,它可能已经坏了,而且肯定是 不是您在定义包依赖项时所期望的。

为了能够做我想做的事,我不得不手动将author/package1 的fork 的URL 添加到我的最终项目tcb13/final-project(与我在tcb13/package1-extension 上所做的相同),例如:

{
    "repositories":
    [
        {
            "type": "vcs",
            "url": "https://github.com/tcb13/package1/" // Fork of author/package1
        },
        {
            "type": "vcs",
            "url": "https://github.com/tcb13/package1-extension"
        }
    ],
    "require": {
        "author/package1": "dev-master", // Reference to the original package, composer will fetch this from my fork defined above...
        "tcb13/package1-extension": "dev-master" // My current extension package
    }
}

composer update 之后,一切都按预期进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    相关资源
    最近更新 更多