Git私有存储库

时间:2014-11-18 20:06:48

标签: git composer-php

当我使用这个

{
    "type": "package",
    "package": {
        "name": "name/vendor",
        "version": "dev-master",
        "source": {
            "url": "git@github.com:name/vendor.git",
            "type": "git",
            "reference": "master"
        }
    }
}

我的autoload_psr4.php文件不是用我在我的存储库中声明的路径生成的,但是当我使用以下配置时,它可以正常工作。

{
    "type": "vcs",
    "url": "git@github.com:name/vendor.git"
}

我想知道为什么第一个配置会正确生成作曲家自动加载文件,但第二个配置却没有。

编辑2:

使用第一个配置运行composer update会产生以下自动加载:

return array(
    'Symfony\\Bundle\\MonologBundle\\' => array($vendorDir . '/symfony/monolog-bundle'),
    'Symfony\\Bundle\\AsseticBundle\\' => array($vendorDir . '/symfony/assetic-bundle'),
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
);

当我更改为第二个配置时,自动加载有:

return array(
    'skowronline\\TaskBundle\\' => array($vendorDir . '/skowronline/taskbundle'),
    'Symfony\\Bundle\\MonologBundle\\' => array($vendorDir . '/symfony/monolog-bundle'),
    'Symfony\\Bundle\\AsseticBundle\\' => array($vendorDir . '/symfony/assetic-bundle'),
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
);

我希望这更清楚。

解决方案https://getcomposer.org/doc/04-schema.md#repositories

  

依赖项'composer.jsons的存储库声明被忽略。

1 个答案:

答案 0 :(得分:1)

当您使用类型为package的第一个配置时,您告诉作曲家覆盖 composer.json中的git@github.com:name/vendor.git。永远不会读取自动加载参数。您可以通过执行以下操作来解决此问题:

{
    "type": "package",
    "package": {
        "name": "name/vendor",
        "version": "dev-master",
        "source": {
            "url": "git@github.com:name/vendor.git",
            "type": "git",
            "reference": "master"
        },
        "autoload": {
            "psr-4": {<your autoload config>}
        }
    }
}

当你使用第二个配置时,你所做的就是告诉作曲家在从packagist下载之前查看git@github.com:name/vendor.git。在这种情况下,作曲家将从存储库中读取composer.json,包括自动加载设置。

第二种配置是首选方式。当您使用第一个示例中的package声明时,您将覆盖程序包作者的原始配置。除非你有充分的理由,否则不要这样做。