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