我已经制作了一个使用ext-mysqli的作曲家软件包“ foo”。在我的开发框中,存在mysqli扩展,因此我对该程序包的所有测试均成功完成,没有任何问题。但是,如果此程序包将落在没有安装mysqli扩展程序的盒子上,那么它将失败。Composer通过在“ require”,“ require-dev”和“ suggest”部分中允许“ ext- *”来解决此问题。但是,程序包开发人员应记住实际上要放入这些依赖项。显然,在发布所有未使用的扩展名都列为依赖项的程序包之前,没有什么可以阻止开发人员(或至少发出警告)。
借助当今可用的众多扩展,可以很容易地忽略这些依赖关系,尤其是当它们总是对用于开发特定程序包的dev box感到满意时,因此没有本地测试可以揭示它们的缺失。
是否有任何工具可以检查composer软件包以查看其是否使用了特定扩展名,并警告是否在composer.json中未实际列出使用的扩展名?
感谢 Jens A. Koch 的回答,我决定制作这样的工具。它可以在 packagist.org 上找到,作为logics/extcheck包。
正如预期的那样,它从已安装的扩展中构建一个字典,然后解析 autoload 和 autoload-dev 部分中引用的源代码。
它没有作为嗅探实现,原因很简单:CodeSniffer 主要关注 PHP/JS/CSS 文件,而不是composer.json。
基本上,要使用它,您需要将“logics/extcheck”包添加到composer.json的“require-dev”部分,运行“composer update”,然后运行“vendor/bin/extcheck”。它将为您提供代码实际使用但在composer.json 中未提及的所有扩展。使用 -v 选项调用它,并且还会为您提供有关扩展使用的信息。
值得注意的是,最初的问题是广泛传播的,甚至众所周知的/顶级软件包实际上也缺少扩展依赖项。如果您认为您已将所有必需的扩展添加到composer.json,那么请尝试extcheck - 我敢!:)
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |