maglnet / composer-require-checker
命令行工具,用于分析composer依赖项并验证包的源代码中未使用任何未知符号
Requires
- php: ~8.2.0 || ~8.3.0 || ~8.4.0
- composer-runtime-api: ^2.0.0
- ext-phar: *
- nikic/php-parser: ^4.19.1
- symfony/console: ^6.4.1 || ^7.0.1
- webmozart/assert: ^1.11.0
- webmozart/glob: ^4.7.0
Requires (Dev)
- ext-zend-opcache: *
- doctrine/coding-standard: ^12.0.0
- phing/phing: ^2.17.4
- phpstan/phpstan: ^1.12.0
- phpunit/phpunit: ^10.5.30
- psalm/plugin-phpunit: ^0.19.0
- roave/infection-static-analysis-plugin: ^1.35.0
- spatie/temporary-directory: ^2.2.1
- vimeo/psalm: ^5.25.0
- 4.13.x-dev
- 4.12.x-dev
- 4.12.0
- 4.11.x-dev
- 4.11.0
- 4.10.x-dev
- 4.10.0
- 4.9.x-dev
- 4.9.0
- 4.8.x-dev
- 4.8.0
- 4.7.x-dev
- 4.7.1
- 4.7.0
- 4.6.x-dev
- 4.6.0
- 4.5.x-dev
- 4.5.0
- 4.4.x-dev
- 4.4.0
- 4.3.x-dev
- 4.3.0
- 4.2.x-dev
- 4.2.0
- 4.1.x-dev
- 4.1.0
- 4.0.x-dev
- 4.0.0
- 3.8.x-dev
- 3.8.0
- 3.7.x-dev
- 3.7.0
- 3.6.x-dev
- 3.6.0
- 3.5.x-dev
- 3.5.1
- 3.5.0
- 3.4.x-dev
- 3.4.0
- 3.3.x-dev
- 3.3.1
- 3.3.0
- 3.2.x-dev
- 3.2.0
- 3.1.x-dev
- 3.1.0
- 3.0.0
- dev-master / 2.1.x-dev
- 2.1.0
- 2.0.0
- 1.1.0
- 1.0.0
- 0.2.1
- 0.2.0
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-renovate/phpunit-phpunit-11.x
- dev-renovate/phing-phing-3.x
- dev-renovate/nikic-php-parser-5.x
- dev-renovate/lock-file-maintenance
- dev-feature/guess-dependencies-from-composer
- dev-bugfix/phar-bultin
- dev-feature/suggest-dependencies-from-php-src
This package is auto-updated.
Last update: 2024-09-22 04:38:39 UTC
README
A CLI tool to analyze composer dependencies and verify that no unknown symbols are used in the sources of a package. This will prevent you from using "soft" dependencies that are not defined within your composer.json
require section.
这是什么?
"软"(或传递性)依赖是指您没有明确定义其存在但仍然使用的代码。相对的是“硬”(或直接)依赖。
您的代码肯定使用了外部依赖项。想象一下,您找到了一个库来访问远程API。您需要thatvendor/api-lib
来构建您的软件并在代码中使用它。这个库是一个硬依赖。
然后您看到另一个远程API可用,但没有库。用例很简单,所以您四处寻找,发现guzzlehttp/guzzle
(或任何其他HTTP客户端库)已经安装,并立即使用它来获取一些信息。Guzzle现在成为了一个软依赖。
然后有一天,当您更新依赖项时,您对第二个API的访问中断了。为什么?事实证明,安装guzzlehttp/guzzle
的原因是它是您包含的thatvendor/api-lib
的依赖项,并且它们的开发人员决定从早期的主要版本更新到最新版本,并在他们的变更日志中简单地声明:“版本3.1.0使用最新的主要版本Guzzle - 预计不会出现破坏性更改。”
您可能会想:我的代码怎么办?
ComposerRequireChecker解析您的代码和您的composer.json文件,以查看您的代码是否使用了未声明为所需库的符号,即软依赖。如果您依赖于已经安装但未明确请求的组件,此工具将对此提出异议,并且您应该明确要求它们,使它们成为硬依赖。这将防止意外的更新。
在上面的情况下,您不会收到thatvendor/api-lib
的最新更新,但如果在更新之前您也要求guzzlehttp/guzzle
,则您的代码将继续工作。
该工具还将检查是否使用了只有安装了扩展才能使用的PHP函数,并且如果未明确要求该扩展,则会提出异议。
安装/使用
ComposerRequireChecker不应该作为您项目依赖项的一部分安装。
PHAR文件(首选)
请检查发行版以获取可用的PHAR文件。下载最新版本并按如下方式运行
php composer-require-checker.phar check /path/to/your/project/composer.json
PHIVE
如果您已经使用PHIVE来安装和管理项目工具,那么您应该能够像这样简单地安装ComposerRequireChecker
phive install composer-require-checker
Composer - 全局命令
此包可以通过使用Composer轻松全局安装
composer global require maglnet/composer-require-checker
如果您尚未设置Composer安装以支持全局要求,请参阅Composer CLI - global 如果已经完成,请按如下方式运行
composer-require-checker check composer.json
这里的composer.json
指的是您项目的根Composer清单。
关于Xdebug的说明
如果在运行ComposerRequireChecker时,您的PHP包含了Xdebug,您可能会遇到一些额外问题,例如超过与Xdebug相关的最大嵌套级别,而且更重要的是,Xdebug会减慢PHP的运行速度。
建议在运行ComposerRequireChecker时不使用Xdebug。
如果您无法提供不带Xdebug的PHP实例,尝试为命令设置环境变量,例如:XDEBUG_MODE=off php composer-require-checker
。
配置
ComposerRequireChecker默认已配置为为某些符号设置白名单。请查看配置文件示例,了解哪些配置选项可用。
您现在可以根据需要调整此文件,并告诉composer-require-checker使用它进行配置。如果您想使用默认的白名单,您可以删除此部分,只调整您想要更改的部分。
请注意,如果您想在一个部分之上添加内容,您必须复制整个部分的全部内容。该工具有意只读取一个配置文件。如果您只传递新的设置,您将得到有关PHP核心扩展和内部符号(如true
或false
)未定义的错误报告。
bin/composer-require-checker check --config-file=path/to/config.json /path/to/your/project/composer.json
默认情况下,如果存在该文件,它将使用composer-require-checker.json
。
扫描额外文件
要扫描不属于您自动加载定义的文件,您可以将glob模式添加到配置文件的scan-files
部分。
以下示例配置文件还会扫描bin/console
文件以及您的bin/
文件夹中所有以.php
扩展名结尾的文件。
composer-require-checker.json
:
{ "scan-files" : ["bin/console", "bin/*.php"] }
如果您不喜欢复制工具的默认设置,考虑将这些路径添加到您项目的Composer自动加载部分。
使用方法
ComposerRequireChecker在现有的目录结构上运行。它不会更改您的代码,甚至不会安装您的composer依赖项。这是一项完全由您自己负责的任务,允许您在扫描后更改/改进事物,以查看是否解决了问题。
因此,常规的工作流程将是
- 克隆您的仓库
- 运行
composer install
安装依赖项 - 运行
composer-require-checker check
检查您的代码
处理自定义安装插件
ComposerRequireChecker仅从您的项目composer.json
中获取有关文件位置的已知信息。它不会使用Composer本身来理解自定义目录结构。
如果您的项目需要使用任何安装插件将文件放入不是vendor/
或通过composer.json
中的vendor-dir
配置设置定义的目录中,ComposerRequireChecker将无法正确检测所需的代码。
作为解决方案,您可以为扫描而仅安装依赖项,不使用插件
- 克隆您的仓库
composer install --no-plugins
将所有代码放入vendor
文件夹- 运行
composer-require-checker check
检查您的代码 - 再次在正确位置安装依赖项
composer install
许可
本软件包在MIT许可下提供。
鸣谢
此软件包最初由Marco Pivetta和Matthias Glaub设计。
以及当然,所有贡献者。