我在理解为什么使用流明运行autoload_psr4.php
时为什么没有在composer install --no-dev
中包含一些作曲家依赖性的问题。
这是我的composer.json
中的require部分:
"require": {
"php": ">=7.1.3",
"barryvdh/laravel-cors": "^0.11.3",
"guzzlehttp/guzzle": "~6.0",
"my-company/my-package": "~1.1",
"laravel/lumen-framework": "5.8.*"
}
我的理解是,依赖关系链是:流明框架取决于illuminate / auth(以及所有其他illuminate / *包),依次由laravel / framework代替,如本文所示(仅作为示例) ,这实际上会输出所有照明包):
$ composer why laravel/framework
laravel/framework v5.8.35 replaces illuminate/auth (self.version)
...
laravel/lumen-framework v5.8.13 requires illuminate/auth (5.8.*)
...
问题是,当部署到服务器时,我们运行composer install --no-dev
,因此不包括仅用于开发的依赖项。 (phpunit,嘲讽等)。这样做时,似乎还删除了一些非dev依赖项,而是导入了诸如nesbot / carbon,monolog / monolog,psr / container之类的东西。
运行composer install
会将那些依赖项放回作曲家的autoload_psr4.php
文件中。但是,如果我将所有dev依赖项从require-dev中取出,并将它们放在require部分中,我会看到完全相同的行为吗?为什么?这是流明或laravel /框架如何声明其依赖关系的上游问题,还是我可以在本地寻找某些地方做错了事?
有关更多信息,下面列出了运行autoload_psr4.php
时composer install
中出现的内容,但在composer install --no-dev
之后没有内容,而require-dev内没有任何依赖项。我认为,在遇到laravel/framework
时,所有这些来源都回到了composer why
:
// None of these are present after running $ composer install --no-dev, but are there when running plain composer install
'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'),
'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'),
'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'),
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'),
'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'),
'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'),
'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'),
'Carbon\\' => array($vendorDir . '/nesbot/carbon/src/Carbon'),
我还能够从5月开始在作曲家中找到this github issue,这听起来很像我的问题,但并不完全匹配。
更新:将Composer从1.9.1降级到1.6.3后,我们能够阻止该问题的发生。但是,由于某些原因,在用composer why
检查任何illumination / *软件包时,laravel / framework仍会显示为替代品。