Git 私有存储库



当我使用这个

{
    "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.json 的存储库声明将被忽略。

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

{
    "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声明(如第一个示例中所示)时,您将覆盖包作者的原始配置。除非你有充分的理由,否则不要这样做。

相关内容

  • 没有找到相关文章

最新更新