自定义存储库不读取我的 composer.json?



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

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

"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"}它会很好地添加它。我错过了什么?

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

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

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

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

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

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

我在这里详细回答了"替换"的工作原理:"替换"属性如何与作曲家一起工作?

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

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

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

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

我把repository改成这样:

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

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

相关内容

  • 没有找到相关文章

最新更新