Composer:从fork扩展另一个的包

时间:2015-06-08 21:50:17

标签: git dependencies fork composer-php

我遇到以下情况:GitHub和Packagist上有包author/package1。我决定将它分成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并且还有一个aditional存储库https://github.com/tcb13/package1/并将程序包版本设置为dev-master,因此作曲家会从我的author/package1下载tcb13/package1修改后的fork,而不是原始的包...(如果我告诉它从tcb13/package1-extension下载,它将无效。)

我将上面的代码提交给GitHub,并尝试在新项目上要求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作为tcb13/package1-extension,因为它指向我的fork repo,但是当我尝试require tcb13/package1时,它似乎看起来不像为我的fork,并试图去寻找分支的原始项目...为什么?

另外,这是我应该使用forks作为依赖关系的方式吗?还有其他方法吗?我最初尝试将fork作为author/package1但它会失败,但要求它Runtime.getRuntime().addShutdownHook(new Thread() { override def run() { println("shutting down spray") IO(Http) ! Http.CloseAll IO(Http) ! PoisonPill system.shutdown(); } }) 也告诉作曲家我有一个额外的存储库工作到现在。

谢谢。

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。根据作曲家文档,这不是一个错误,它是由于安全性而在设计中发生的事情。

来自GitHub comment

  

考虑一下:你有一个项目取决于我的一个包。   我依赖于对您的应用程序至关重要的包。我发生了   制作一个分叉来引入一个新功能并意外地标记一个   在我的composer.json中使用存储库发布。你碰巧更新了   你的包裹,并得到我的叉子,可能会破坏,绝对   不是你在定义包依赖时所期望的。

为了能够做我想做的事情,我不得不手动将最终项目tcb13/final-project添加到author/package1的分支的URL(就像我在{{1}上所做的那样) }),像:

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 } } 之后,这一切都按预期工作。