0

我已经分叉了https://github.com/jasonlewis/basset,现在正尝试将我的叉子添加到我的项目中。composer.json但是在我运行后它似乎没有读取我的分叉文件composer update,为什么?我究竟做错了什么?

我在repository之后添加了这个require: {}

"repositories": [
{
    "type":"package",
    "package": {
      "name": "marwelln/basset",
      "version":"master",
      "source": {
          "url": "https://github.com/Marwelln/basset.git",
          "type": "git",
          "reference":"master"
        }
    }
}
],

我的分叉composer.json看起来像这样(除了名称之外没有任何变化):

{
    "name": "marwelln/basset",
    "description": "A better asset management package for Laravel.",
    "keywords": ["assets", "basset", "laravel"],
    "license": "BSD-2-Clause",
    "authors": [
        {
            "name": "Jason Lewis",
            "email": "jason.lewis1991@gmail.com"
        }
    ],
    "require": {
        "php": ">=5.3.0",
        "kriswallsmith/assetic": "1.1.*"
    },
    "require-dev": {
        "mockery/mockery": ">=0.7.2",
        "illuminate/config": "4.0.*",
        "illuminate/console": "4.0.*",
        "illuminate/filesystem": "4.0.*",
        "illuminate/log": "4.0.*",
        "illuminate/routing": "4.0.*",
        "illuminate/support": "4.0.*",
        "symfony/process": "2.3.*"
    },
    "suggest": {
        "aws/aws-sdk-php": "Deploy static assets directly to your S3 buckets.",
        "rackspace/php-cloudfiles": "Deploy static assets directly to your Cloud Files container."
    },
    "autoload": {
        "psr-0": {
            "Basset": "src/"
        },
        "classmap": [
            "tests/Cases/FilterTestCase.php"
        ],
        "files": ["src/helpers.php"]
    },
    "extra": {
        "branch-alias": {
            "dev-master": "4.0-dev"
        }
    },
    "minimum-stability": "dev"
}

有了这个,Basset命名空间没有注册autoload_namespace.php也没有得到"kriswallsmith/assetic": "1.1.*",但如果我使用原来的require: { "jasonlewis/basset" : "dev-master"}它添加它就好了。我错过了什么?

4

2 回答 2

1

您已经完成了一些被认为不是 Composer 最佳实践的事情。

首先,您应该尽量避免将“包”类型的存储库包含在哪里可以找到您需要的东西的所有详细信息。从长远来看,这将成为维护的噩梦。composer.json仅当您绝对确定软件的维护者自己不会包含composer.json文件时,才应将软件包包含在您的文件中。http://getcomposer.org/doc/04-schema.md#repositories上的文档说明:

包:如果您依赖的项目不支持任何作曲家,您可以使用包存储库内联定义包。您基本上只是内联 composer.json 对象。

这种情况在这里不适用,因为您维护要自己使用的存储库,并且应该能够放入composer.json.

现在,Composer 支持分叉和扩展现有库然后在代码中使用它的过程,但不支持您的方式。首先,您应该替换供应商的名称,因为您接管了该角色,并且您的存储库和软件应该与其他软件包区分开来。因此,将“jasonlewis/basset”重命名为“marwelln/basset”是正确的做法,并且仅在您想引用自己的版本时才使用该名称。

现在的问题可能是,如果您分叉了一个流行的库,并且正在使用其他确实需要原始库的库,那么您最终会添加这两个包。这就是“替换”字段的用途:您可以自己composer.json声明您认为您的软件包能够替换原始软件。一些细节在这里: http: //getcomposer.org/doc/04-schema.md#replace

我在这里给出了关于“替换”如何工作的详细答案:“替换”属性如何与作曲家一起工作?

最后,我认为您应该执行以下操作(您仍然可以更改):

克隆原始版本,将composer.json您自己的供应商名称更改为“名称”,并添加一个“替换”为您正在更改的原始软件的版本。您可能应该对版本严格,因为您实际上只替换您知道的版本。如果以后您仍然知道您更换了较新的版本,则可以更改“更换”信息。

然后,您必须像以前一样添加自己的存储库,并要求软件名称带有您自己的供应商名称。

您可能在某个时间点完成了大部分操作,但添加替换信息的步骤是缺少链接。

于 2013-10-18T19:40:48.300 回答
0

我改成repository这样:

"repositories": [
{
    "type":"vcs",
    "url": "https://github.com/Marwelln/basset"
}
],

然后用来jasonlewis/basset代替marwelln/basset. 它现在可以正常工作了。

于 2013-10-18T10:21:13.920 回答