Lumen / Composer不会使用--no-dev安装所有非dev依赖项

时间:2019-11-19 19:53:38

标签: php laravel composer-php lumen

我在理解为什么使用流明运行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.phpcomposer 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仍会显示为替代品。

0 个答案:

没有答案