如何扫描完整的Symfony项目的依赖项?

时间:2016-09-26 06:52:50

标签: symfony composer-php

我正在研究Symfony 2.7项目。我运行composer update --dry-run来检查哪些软件包可能需要更新。 Composer通知了我一个已弃用的软件包:

  

包symfony / icu被放弃了,你应该避免使用它。使用   symfony / intl而不是。

我只是从composer.json文件中删除了依赖项,然后再次运行composer update --dry-run。该消息未再次显示,symfony/icu已卸载且未安装symfony/intl

很好,这意味着其他要求不取决于symfony/icusymfony/intl但我可以确定,我自己的代码中不需要这些软件包吗?

我刚刚创建了白色的项目,我不记得为什么我添加了symfony/icu。我有可能,曾经需要此软件包的代码已被删除,但我不确定。

我使用grep搜索symfony/icu的任何导入,但未找到任何内容。但是,这并不能保证,包不会在我的代码中使用,是吗?

有没有办法检查完整 Symfony项目中是否存在需要特定包的依赖项?

2 个答案:

答案 0 :(得分:1)

检查每个包裹? :(

我认为你只能通过自动化测试来实现这一目标。

没有工具(我知道)可以检测是否需要某些包来完成缺失的类。还有可选的依赖项(包没有它们,但是它们会添加一些新功能),所以你会发现缺少类但不需要运行应用程序。

如何查看一个包裹? :)

您使用grep朝着正确的方向前进。 而是寻找命名空间而不是包名。包名称并不总是1:1来打包命名空间。

我会寻找:

答案 1 :(得分:1)

我认为最干净的方法是从composer开始并告诉它转储导致您的软件包安装的所有软件包:

  • 例如,我试图找出安装monolog/monolog的原因:

    $ composer depends monolog/monolog
    symfony/monolog-bundle  2.11.1  requires  monolog/monolog (~1.18)  
    

    monolog/monolog而安装了symfony/monolog-bundle

  • 正如您所说,您可能无意中使用了另一个软件包的依赖项,因此您没有将其添加到依赖项中。

    我正如您搜索我的源代码一样使用grep。请注意,搜索实际的类名称而不是包名称会更好。搜索包名称会为您提供composer.json个文件,但使用composer dependsgrep更容易分析:

    $ grep  --include=\*.php -rnw './vendor' -e 'use Monolog'
    ./vendor/monolog/monolog/src/Monolog/ErrorHandler.php:16:use Monolog\Handler\AbstractHandler;
    ./vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php:14:use Monolog\Logger;
    ./vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php:45:            throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter');
    ./vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php:14:use Monolog\Logger;
    ./vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php:13:use Monolog\Logger;
    ./vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php:34:            throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter');
    ./vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php:14:use Monolog\Logger;
    

    此命令会搜索所有*.php个文件,并复制包含Monolog的行号。

不幸的是,这两种方法只是分析你的代码验尸。真正避免处理这个的最好方法是编写单元测试。然后克隆新的存储库,使用composer install安装依赖项并运行测试。这应该保证您的代码独立于任何其他不需要的依赖项运行。

相关问题