是否有任何工具可以检查作曲家包在“必需”,“必需开发”和“建议”部分中是否存在实际使用的PHP扩展


Is there any tool to check a composer package for presence of actually used PHP extensions in "required", "required-dev" and "suggest" sections?

我做了一个使用ext-mysqli的作曲家包"foo"。在我的开发框上,mysqli 扩展存在,因此我对此包的所有测试都成功,没有任何问题。但是,如果这个软件包会落在一个没有安装 mysqli 扩展的盒子上,那么它将惨败。Composer 通过在"require"、"require-dev"和"suggest"部分中允许"ext-*"来解决此问题。但是包开发人员应该记住实际放置这些依赖项。显然,在发布一个包之前,没有什么可以阻止开发人员(或至少警告)的包,而没有将所有使用的扩展列为依赖项。

由于今天有大量可用的扩展,很容易忽略这些依赖项,特别是当它们总是对用于开发特定包的开发盒感到满意时,因此没有本地测试会揭示它们的缺失。

是否有任何工具可以检查作曲家包以查看它是否使用特定的扩展名,并警告使用的扩展是否未实际在 composer.json 中列出?

感谢Jens A. Koch的回答,我决定制作这样的工具。它可以在 packagist.org 上作为逻辑/extcheck包找到。

正如预期的那样,它从已安装的扩展构建一个字典,然后解析自动加载和自动加载开发部分中引用的源代码。

由于一个简单的原因,它没有被实现为嗅探:CodeSniffer 主要关注 PHP/JS/CSS 文件,而不是 composer.json。

基本上要使用它,您只需要将"logics/extcheck"包添加到composer.json的"require-dev"部分,运行"composer update",然后运行"vendor/bin/extcheck"。它将为您提供代码实际使用但在 composer.json 中未提及的所有扩展。使用 -v 选项调用它,还会为您提供有关扩展使用的信息。

值得注意的是,原始问题很普遍,即使是众所周知/顶级软件包实际上也缺少扩展依赖项。如果您认为您已经将所有必需的扩展添加到 composer.json,请尝试 extcheck - 我敢!:)

ComposerRequireChecker 应该正是您要查找的内容。

可以通过作曲家安装的 CLI 工具

composer require maglnet/composer-require-checker

并通过以下方式使用

composer-require-checker check /path/to/your/project/composer.json

是否有任何工具可以检查作曲家包以查看它是否使用特定的扩展名,并警告使用的扩展是否未实际在 composer.json 中列出?

不,这样的工具还不存在(尚不存在)。

您需要解析源代码以确定使用的扩展。可能是通过在字典中查找它们(用于扩展提供的函数和常量)。

例如,您可以将其编写为 PHPCodeSniffer 的自定义嗅探。