当我使用这个
时{
"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的存储库声明被忽略。
答案 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
声明时,您将覆盖程序包作者的原始配置。除非你有充分的理由,否则不要这样做。